typescript 过滤嵌套JSON的真值[已关闭]

ws51t4hk  于 2023-01-10  发布在  TypeScript
关注(0)|答案(1)|浏览(105)

4天前关闭。
这篇文章是编辑和提交审查3天前。
Improve this question
我尝试过滤JSON,使其只包含值为true或嵌套属性为true的属性。
考虑以下JSON

{
  "name": "xyz",
  "version": "50",
  "A": true,
  "B": {
    "type": ""
  },
  "C": {
    "D": true,
    "E": true
  },
  "I": true
}

我想得到下面的结果:

{
  "A": true,
  "C": {
    "D": true,
    "E": true
  },
  "I": true
}

我还可以使用这个结果的另一个替代方案是非嵌套版本:

{
  "A": true,
  "D": true,
  "E": true,
  "I": true
}

如果可能的话,我想两种功能都有。
我正在尝试以下功能:

function(response) {
  let result = {};
  for (const key in response) {
    const entry = response[key];
    if (entry == true) {
      result[key] = entry;
    }
  }
  return result;
}

下面是函数的返回值:

{
  "A": true,
  "I": true
}
bjg7j2ky

bjg7j2ky1#

如果出现对象,您可以采用递归方法过滤级别或嵌套级别。

const
    filter = object => {
        const entries = Object
            .entries(object)
            .flatMap(([k, v]) => {
                const temp = v === true ||
                    v && typeof v === 'object' && filter(v);
                return temp
                    ? [[k, temp]]
                    : [];
            });
        return entries.length ? Object.fromEntries(entries) : undefined;
    },
    response = { name: "xyz", version: "50", A: true, B: { type: "" }, C: { D: true, E: true }, I: true };

console.log(filter(response));

相关问题