通过多个键过滤嵌套JSON

问题描述 投票:0回答:1

我对 JavaScript 很陌生,但对 JSON 和对象也很陌生。

我需要过滤多个键上的嵌套 JSON。

我正在努力

const filteredEntries = oldJSON.filter(([key, value]) => {
  return key === "id" && key === "label" && key==="options"
});

但我明白

object is not iterable 

我知道有很多此类问题,但我无法让其中任何一个问题适用于我的特定 JSON 格式。

如有任何帮助,我们将不胜感激。

谢谢

 const oldJSON = [
 {
 "id": "c3c6f410f58e5836431b473ebcf134756232d04f2bf35edff8",
 "component": "checkbox",
 "customFields": [

 ],
 "index": 0,
 "label": "Sector2",
 "options": {
  "62f92fab79ac81d933765bd0bbc4a1f5ea26cb3a088bcb4e6e": {
    "index": 0,
    "value": "Bob",
    "label": "Bob",
    "count": 1
  },
  "2fe91aa3567c0d04c521dcd2fc7e40d7622bb8c3f594d503da": {
    "index": 1,
    "value": "Student",
    "label": "Student",
    "count": 1
  },
  "c59ea1159f33b91a7f6edc6925be5e373fc543e4": {
    "index": 2,
    "value": "BBB",
    "label": "BBB",
    "count": 1
  },
  "c59ea1159f33b91a7f6edc6925be5e373fc54AAA": {
    "index": 3,
    "value": "Orange Duck",
    "label": "Orange Duck",
    "count": 1
  }
},
"required": false,
"validation": "/.*/",
"imported": false
},
{
"id": "f794c6a52e793ee6f5c42cd5df6b4435236e3495e951709485",
"component": "textInput",
"customFields": [

],
"index": 1,
"label": "Brown Cow",
"options": {
},
"required": false,
"validation": "/.*/",
"imported": false
},
{
"id": "f794c6a52e793ee6f5c42cd5df6b4435236e3495e95170ZZZ",
"component": "textInput",
"customFields": [

],
"index": 1,
"label": "Red Fish",
"options": {
},
"required": false,
"validation": "/.*/",
"imported": false
},
];

const filteredEntries = oldJSON.filter(([key, value]) => {
return key === "id" && key === "label" && key==="options"
});

console.log(filteredEntries )

预期输出是

[ {
"id": "c3c6f410f58e5836431b473ebcf134756232d04f2bf35edff8",
   "label": "Sector2",
   "options": {
  "62f92fab79ac81d933765bd0bbc4a1f5ea26cb3a088bcb4e6e": {
    "index": 0,
    "value": "Bob",
    "label": "Bob",
    "count": 1
  },
  "2fe91aa3567c0d04c521dcd2fc7e40d7622bb8c3f594d503da": {
    "index": 1,
    "value": "Student",
    "label": "Student",
    "count": 1
  },
  "c59ea1159f33b91a7f6edc6925be5e373fc543e4": {
    "index": 2,
    "value": "BBB",
    "label": "BBB",
    "count": 1
  },
  "c59ea1159f33b91a7f6edc6925be5e373fc54AAA": {
    "index": 3,
    "value": "Orange Duck",
    "label": "Orange Duck",
    "count": 1
  }
  },
  {
  "id": "f794c6a52e793ee6f5c42cd5df6b4435236e3495e951709485",
  "label": "Brown Cow",
  "options": {
  }
  },
  {
  "id": "f794c6a52e793ee6f5c42cd5df6b4435236e3495e95170ZZZ",
  "label": "Red Fish",
  "options": {
  }];
javascript google-apps-script
1个回答
0
投票

您的主要问题在于您的条件,您的条件 key === "id" && key === "label" && key === "options" 在逻辑上是不可能的,因为单个键不能等于多个不同的字符串同一时间。

代码应该是这样的:

const filteredEntries = oldJSON.filter(item =>
        item.id && item.label && item.options
    ).map(({ id, label, options }) => ({ id, label, options }));

console.log(filteredEntries);
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.