我有一个具有数组的json数据。数组的每个元素都有一个名为项的数组。如果字符串与itemName不匹配,我想删除内部数组元素。我尝试使用过滤器方法,但无法正常工作。它仅返回匹配的内部数组元素,但所有外部数组元素也将被删除。 P.S看到代码,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": []
}
]
}
答案 0 :(得分:1)
除去外部元素不是因为filter
方法,而是因为map
方法。请参见,在您的map
方法中,您忽略了所有其他属性,因为您只返回了在items
数组上处理的内容。
因此,代码应更像这样:
const update2 = state.menuResponse.map(item => ({ ...item, items: item.items.filter(subItem => subItem.itemName.includes('C')) }));
因此,您可以从map
方法返回对象内部的所有内容,然后再对其进行处理,并且仅通过过滤数组就可以修改items
属性,就像您已经做过的那样。
理论上还没有测试,但是应该可以工作...
答案 1 :(得分:1)
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);