我需要从嵌套项目的数组中删除项目。这是数组,
{
"name": "Main Course",
"items": [
{
"menuname": "Chinese",
"id": "12",
"menu": [
{"name": "Noodles",id="1"},
{"name": "Rice",id="2"},
{"name": "Xinjiang Roast",id="3"}
]
},
{
"menuname": "Indian",
"id": "14",
"menu": [
{"name": "Rice",id="2"},
{"name": "Paratha",id="5"},
{"name": "Dal Fry",id="6"}
]
}
]
}
我需要从第一个菜单(menuname:Chinese)中删除项目{,name“:”Rice“,id =”2“}。请注意,同一项目也出现在另一个菜单(menuname:Indian)中,我不想删除。看起来常见的方法是找到indexOf要删除的项目并将其拼接。这是我试过的,
myArray[0].items.forEach(function (val) {
if((val.menuname==="Chinese" && val.id==="12"))
{
val.menu.forEach(function (value) {
if(value.name === "Rice" && value.id==="2"){
myArray.indexOf(value.name);
}
})
}
});
这总是返回索引-1。我做错了什么?
编辑:对不明确的问题进行密切投票(认真?)。我正在使用的代码没有返回正确的索引,我问这个代码有什么问题。尽管如此,请花些时间阅读这个问题。
答案 0 :(得分:1)
首先你的JSON字符串看起来很奇怪。
然后你不能调用myArray[0]
,因为你没有得到一个数组:
var k = {
"name": "Main Course",
"items": [{
"menuname": "Chinese",
"id": "12",
"menu": [{
"name": "Noodles",
"id": "1"
}, {
"name": "Rice",
"id": "2"
}, {
"name": "Xinjiang Roast",
"id": "3"
}]
}, {
"menuname": "Indian",
"id": "14",
"menu": [{
"name": "Rice",
"id": "2"
}, {
"name": "Paratha",
"id": "5"
}, {
"name": "Dal Fry",
"id": "6"
}]
}]
};
k.items.forEach(function (val) {
if (val.menuname === "Chinese" && val.id === "12") {
for (var i = 0; i < val.menu.length; i++) {
if (val.menu[i].name === "Rice" && val.menu[i].id === "2") {
val.menu.splice(i, 1);
}
}
}
});
console.log(k);