按字符串数组过滤嵌套的对象数组
Filtering nested array of objects by array of strings
晚上好
不知道有没有人能帮帮我,我好像在兜圈子
我正在尝试通过另一个字符串数组从数组中获取包含 key/field
"type"
的所有对象。
{
"someData": [
{
"date": "someDate",
"someNestedData": [
{
"id": "1",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "2",
"type": "type2",
"dateCreated": "someDate"
}
]
},
{
"date": "someDate",
"someNestedData": [
{
"id": "3",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "4",
"type": "type4",
"dateCreated": "someDate"
}
]
}
]
}
和另一个字符串数组const types = ['type1', 'type2
]`
我正在尝试过滤掉数组,以便过滤掉类型数组中不包含键的任何对象。
所以最终结果会是
{
"someData": [
{
"date": "someDate",
"someNestedData": [
{
"id": "1",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "2",
"type": "type2",
"dateCreated": "someDate"
}
]
},
{
"date": "someDate",
"someNestedData": [
{
"id": "3",
"type": "type1",
"dateCreated": "someDate"
},
]
}
]
}
我尝试了一些类似
的方法
data.someData.someNestedData.indexOf(function (i) {
return types.indexOf(i.type);
})
以及其他一些臃肿的方法,只是不正确并正在寻找性能相当好的东西。
TIA :)
你可以这样做:
const types = ['type1', 'type2'];
const res = [
{
"date": "someDate",
"someNestedData": [
{
"id": "1",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "2",
"type": "type2",
"dateCreated": "someDate"
}
]
},
{
"date": "someDate",
"someNestedData": [
{
"id": "3",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "4",
"type": "type4",
"dateCreated": "someDate"
}
]
}
]
// map over the array
.map(obj => ({
// rebuild the object
...obj,
// but replace "someNestedData" with the list of element that has the 'type' filed included in types
someNestedData: obj.someNestedData.filter(
el => types.includes(el.type)
)
}))
console.log(res)
晚上好
不知道有没有人能帮帮我,我好像在兜圈子
我正在尝试通过另一个字符串数组从数组中获取包含 key/field
"type"
的所有对象。
{
"someData": [
{
"date": "someDate",
"someNestedData": [
{
"id": "1",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "2",
"type": "type2",
"dateCreated": "someDate"
}
]
},
{
"date": "someDate",
"someNestedData": [
{
"id": "3",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "4",
"type": "type4",
"dateCreated": "someDate"
}
]
}
]
}
和另一个字符串数组const types = ['type1', 'type2
]`
我正在尝试过滤掉数组,以便过滤掉类型数组中不包含键的任何对象。
所以最终结果会是
{
"someData": [
{
"date": "someDate",
"someNestedData": [
{
"id": "1",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "2",
"type": "type2",
"dateCreated": "someDate"
}
]
},
{
"date": "someDate",
"someNestedData": [
{
"id": "3",
"type": "type1",
"dateCreated": "someDate"
},
]
}
]
}
我尝试了一些类似
的方法data.someData.someNestedData.indexOf(function (i) {
return types.indexOf(i.type);
})
以及其他一些臃肿的方法,只是不正确并正在寻找性能相当好的东西。 TIA :)
你可以这样做:
const types = ['type1', 'type2'];
const res = [
{
"date": "someDate",
"someNestedData": [
{
"id": "1",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "2",
"type": "type2",
"dateCreated": "someDate"
}
]
},
{
"date": "someDate",
"someNestedData": [
{
"id": "3",
"type": "type1",
"dateCreated": "someDate"
},
{
"id": "4",
"type": "type4",
"dateCreated": "someDate"
}
]
}
]
// map over the array
.map(obj => ({
// rebuild the object
...obj,
// but replace "someNestedData" with the list of element that has the 'type' filed included in types
someNestedData: obj.someNestedData.filter(
el => types.includes(el.type)
)
}))
console.log(res)