我有一个有数组的json data。数组的每个元素都有名为items的数组。如果字符串与itemName不匹配,我想删除内部数组元素。我试过使用过滤方法,但它并不像预期的那样工作。它只返回匹配的内部数组元素,但也删除了所有外部数组元素。附注:查看代码、json数据、我得到的输出和预期输出。提前感谢
代码:
const update2 =
state.menuResponse.map(
item => {
return item.items.filter(item => (item.itemName).includes("C"))
})
console.log("menuSearcheddd", update2)Json数据
{
"data": [
{
"menuHeader": "Starters",
"items": [
{
"itemId": "1",
"itemName": "burger",
},
{
"itemId": "ITD1ZYTH",
"itemName": "Cheese balls",
}
]
},
{
"menuHeader": "string",
"items": [
{
"itemId": "1",
"itemName": "burger",
},
{
"itemId": "2",
"itemName": "burger-non veg",
}
]
}
]
}输出:
{
"data": [
{
"items": [
{
"itemId": "ITD1ZYTH",
"itemName": "Cheese balls",
}
]
},
{
"items": []
}
]
}应该是什么?
{
"data": [
{
"menuHeader": "Starters",
"items": [
{
"itemId": "ITD1ZYTH",
"itemName": "Cheese balls",
}
]
},
{
"menuHeader": "string",
"items": []
}
]
}发布于 2019-05-31 18:41:59
删除外部元素不是因为filter方法,而是因为map方法。看,在您的map方法中,您忽略了所有其他属性,因为您只返回在items数组上处理的内容。
因此,代码应该看起来更像这样:
const update2 = state.menuResponse.map(item => ({ ...item, items: item.items.filter(subItem => subItem.itemName.includes('C')) }));因此,在处理对象之前,从map方法返回对象内部的所有内容,并且只通过过滤数组来修改items属性,就像您已经这样做了。
我还没有成功测试它,但理论上应该可以工作...
发布于 2020-02-17 18:08:57
var list = this.state.materialList.filter(item => {
//Filter Inner Array
var innerData = item.data.filter(dataItem => {
return dataItem.qty > 0
})
// Assign value
item.data = innerData;
return item.Id > 0
})
console.log('Filtered List ',list);https://stackoverflow.com/questions/56393278
复制相似问题