使用嵌套项从Array中删除项

时间:2014-06-19 07:35:33

标签: javascript arrays

我需要从嵌套项目的数组中删除项目。这是数组,

{
  "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。我做错了什么?

编辑:对不明确的问题进行密切投票(认真?)。我正在使用的代码没有返回正确的索引,我问这个代码有什么问题。尽管如此,请花些时间阅读这个问题。

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);

http://jsfiddle.net/XmsQR/2/