2014-06-19 2 views
-1

중첩 항목이있는 배열에서 항목을 삭제해야합니다. 첫 번째 메뉴에서, (MenuName 하 : 중국어) : 여기 내가 말할 항목을 삭제해야 배열,중첩 항목이있는 배열에서 항목 삭제

{ 
    "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"} 
     ] 
    } 
    ] 
} 

, { "쌀", 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

사용 스플 라이스 : 당신이 배열을하지 않기 때문에

그럼 당신은 myArray[0]를 호출 할 수 없습니다 http://www.tutorialspoint.com/ javascript/array_splice.htm –

+1

'id = "3"'JSON 형식입니까? – Fractaliste

+0

@Fractaliste,이 배열은 객체에서 JSON.stringify를 실행 한 후 가져옵니다. – redGREENblue

답변

1

먼저 JSON 문자열이 이상하게 보입니다. 참조 배열 요소 제거에

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/

+0

항목을 삭제하는 가장 좋은 방법은 무엇입니까? delete value.name 또는 value.id를 사용하여 개별 항목을 삭제할 수 있지만 배열에 빈 {}이 표시됩니다. – redGREENblue

+0

@redGREENblue'splice()'해봤습니까? 나는 나의 대답을 업데이트했다. – Fractaliste