2013-05-21 5 views
0

1 관찰 배열 일치하는 ID가 개체를 제거 :녹아웃 관찰 배열을 비교하고 배열에서

data = [{id:1 , name:'abc'},{id:2 ,name:'xyz'},{id:3 , name:'rst'}] 

가 다른 배열 :

dataProvider = [{id:3 , name:'pqr'} , {id:4 , name:'hjk'}] 

이제 우리는 데이터 공급자와의 데이터 배열을 비교할 수를 id = 3 이전 객체를 대체해야하고 id = 4로 단순히 객체를 데이터 배열로 푸시합니다.

따라서 새로운 데이터 배열 것이

data = [{id:1 , name:'abc'},{id:2 ,name:'xyz'} ,{id:3 , name:'pqr'} , {id:4 , name:'hjk'}] 
+0

'for..in'을'for' 루프로 변경하거나'for..in'을 사용해야한다면'hasOwnProperty'를 확인하십시오. [이 질문] (http://stackoverflow.com/questions/242841/javascript-for-in-vs-for)을 참조하십시오. (문제가 해결되었지만 어느 것이 든 해를 끼칠 수는 없다.) – Jeroen

답변

0

$.each을 사용하는 대신 knockout의 유틸리티 함수 ko.utils.arrayFilter을 사용하면됩니다. 또한 일치 가능한 ID를 객체에 캐시하여 각 데이터 항목에 대해 전체 dataprovider를 루프 할 필요가 없도록했습니다.

0

같은 예, 할 수 있습니다

$.each(self.data(), function() { 
    for (var x in dataprovider) { 
     if (this.id === x.id) 
      this.data = x.data; 
     else { 
      self.data().push({id: x.id, data: x.data}); 
     } 
    } 
}); 

Knockout.js 완전히 jQuery를 통합 라이브러리입니다.

+0

dataprovider도 배열이고 원하는 수의 객체를 포함 할 수있는 경우 – xyz

+0

@kishan : 답변을 편집합니다. 희망이 도움이 될 수 –

+0

@minhcat 편집 주셔서 감사하지만 내 실수는 내가 제대로 질문을 언급하지 않았습니다. 하지만 이제 편집했습니다. 이 경우 나를 도울 수 있습니까? – xyz

관련 문제