从嵌套对象和数组中过滤掉对象

时间:2021-05-11 08:16:27

标签: javascript arrays object methods filter

我需要过滤这个数组,以便只留下正确的类别代码

const yearLayers= 
     [
        {
            "year": 2016,
            "eventNodes": [
               {"header": "Pearls of Wisdom", "categoryCode": 3,}
             ]
        },
        {
            "year": 2017,
            "eventNodes":[
              {"header": "VENuS Satellite", "categoryCode": 2},
              {"header": "Hope for millions", "categoryCode": 1}
            ]
        },
        {
            "year": 2012,
            "eventNodes": [
              {"header": "green electricity Pioneer", "categoryCode": 1}
              {"header": "This is a header", "categoryCode": 3,}
              {"header": "more titles here", "categoryCode": 1,}
            ]
        }
    ]

这是数组外观的片段。我需要过滤掉类别代码不是 === 1 的对象。所以我留下了一个只有 categoryCode: 1 的数组。

const yearLayers= 
     [
        {
            "year": 2016,
            "eventNodes": []
        },
        {
            "year": 2017,
            "eventNodes":[
              {"header": "Hope for millions", "categoryCode": 1}
            ]
        },
        {
            "year": 2012,
            "eventNodes": [
              {"header": "green electricity Pioneer", "categoryCode": 1}
              {"header": "more titles here", "categoryCode": 1,}
            ]
        }
    ]

我曾尝试使用数组方法,但似乎无法到达嵌套数组和嵌套对象的内部。我想我错过了什么

const filteredArr = yearLayers
            .map(layer => layer.eventNodes)
            .map(node => node.categoryCode)
            .filter(node => node.categoryCode !== 1)

2 个答案:

答案 0 :(得分:3)

您可以像这样将 map()filter() 结合使用:

const formattedWorkbook = [{
    "year": 2016,
    "value": [
       {"header": "Pearls of Wisdom", "categoryCode": 3}
     ]
}, {
    "year": 2017,
    "value":[
      {"header": "VENuS Satellite", "categoryCode": 2},
      {"header": "Hope for millions", "categoryCode": 1}
    ]
}, {
    "year": 2012,
    "value": [
      {"header": "green electricity Pioneer", "categoryCode": 1},
      {"header": "This is a header", "categoryCode": 3},
      {"header": "more titles here", "categoryCode": 1}
    ]
}];

const filter = (data, category) => data.map(({year, value}) => ({
  year,
  eventNodes: value.filter(v => v.categoryCode == category)
}));

console.log(filter(formattedWorkbook, 1));

这样可以避免修改原始数据。

答案 1 :(得分:1)

如果您将 mapfilter 结合使用,您可以轻松获得结果。

const formattedWorkbook = [
  {
    year: 2016,
    value: [{ header: "Pearls of Wisdom", categoryCode: 3 }],
  },
  {
    year: 2017,
    value: [
      { header: "VENuS Satellite", categoryCode: 2 },
      { header: "Hope for millions", categoryCode: 1 },
    ],
  },
  {
    year: 2012,
    value: [
      { header: "green electricity Pioneer", categoryCode: 1 },
      { header: "This is a header", categoryCode: 3 },
      { header: "more titles here", categoryCode: 1 },
    ],
  },
];

const result = formattedWorkbook.map(({ year, value }) => {
  const filteredValue = value.filter((o) => o.categoryCode === 1);
  return { year, value: filteredValue };
});

console.log(result);

2)

const formattedWorkbook = [
  {
    year: 2016,
    value: [{ header: "Pearls of Wisdom", categoryCode: 3 }],
  },
  {
    year: 2017,
    value: [
      { header: "VENuS Satellite", categoryCode: 2 },
      { header: "Hope for millions", categoryCode: 1 },
    ],
  },
  {
    year: 2012,
    value: [
      { header: "green electricity Pioneer", categoryCode: 1 },
      { header: "This is a header", categoryCode: 3 },
      { header: "more titles here", categoryCode: 1 },
    ],
  },
];

const result = formattedWorkbook.map(({ year, value }) => ({
  year,
  value: value.filter((o) => o.categoryCode === 1),
}));

console.log(result);

相关问题