javascript - 删除数组内的内部数组的一项 - 反应原生
问题描述
我有一个包含数组的 json 数据。数组的每个元素都有数组命名项。如果字符串与 itemName 不匹配,我想删除内部数组元素。我尝试使用过滤器方法,但它没有按预期工作。它只返回匹配的内部数组元素,但所有外部数组元素也被删除。PS 查看代码、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": []
}
]
}
解决方案
外部元素被移除不是因为filter
方法,而是因为map
方法。看,在您的map
方法中,您忽略了所有其他属性,因为您只返回您在items
数组上处理的内容。
所以,代码应该看起来更像这样:
const update2 = state.menuResponse.map(item => ({ ...item, items: item.items.filter(subItem => subItem.itemName.includes('C')) }));
因此,从您的map
方法中,您将在处理对象之前返回对象内部的所有内容,并且仅items
通过过滤数组来修改属性,就像您已经完成的那样。
还没有设法测试它,但理论上应该可以工作......
推荐阅读
- haskell - 如何从 GitHub 将 Haskell 包添加到我的 shell.nix 文件中?
- angular - 当用户单击角度 8(数据服务)时,发射不起作用
- ios - 将自定义框架 xib 加载到主应用程序中引发错误
- ubuntu - 从 `systemd` 脚本运行的 `dotnet` 命令找不到 AspNetCore 3.0,但可以从命令行运行
- bash - 当全局未安装 gulp 时,Bash 无法识别 gulp
- java - MongoTemplate 更新为同一文档设置数组中的多个对象
- regex - 带有 ascii 和控制字符的电子邮件正则表达式
- javascript - 获取数组中所有元素的长度以在 javascript/react 中创建过滤器
- java - JNI 错误“未找到实现”-> Android 独立工具链
- postgresql - pgbouncer - 无法连接到服务器:地址已在使用中 (0x00002740/10048)