我需要过滤这个数组,以便只留下正确的类别代码
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)
答案 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)
如果您将 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 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);