2017-09-29 1 views
0

두 개의 서로 다른 시스템을 동기화하는 node.js에 API를 작성하려고하는데 원본 시스템에서받은 객체 배열을 분해하는 데 문제가 있습니다. (새 것 (I 대상 시스템에 보낼 필요는 의미), 세 사람 - 나는 또한이 무엇배열 키 목록을 기반으로 JSON 배열에서 항목을 제거하려면 어떻게해야합니까?

sourcedata = { 
     "items": [ 
      { "id": "item1", 
      "some fields": {...array of some fields }, 
      "more fields": {another block of fields} 
      }, 
     { "id": "item2", 
     "some fields": {...array of some fields }, 
     "more fields": {another block of fields} 
       }] 
    } 

이 ID의 세 가지 배열 인 : 기본적으로,이 같은 비트 보이는 배열을받을 대상에서 삭제) 및 둘 다에 나타나는 태그 - 특수 태그가 다른 태그인지 확인하기 위해 필요합니다.

newitems = [id1,id2,id3] 
existingItems [id4,id5,id6] 
deletedItems = [id7,id8] 

난 할 노력하고있어에만 신규 및 기존 항목의 데이터를 포함하는 새로운 배열을 생성, 그래서 처리하고 각각에 대해 sourcedata 배열을 스캔하지 않고 대상 시스템에 그들을 보내 수 있습니다 열쇠와 무엇을 해야할지 결정. 나는 간단한 배열을 비교할 때 그렇게하는 법을 알고 있지만 여기서는 전체 객체와 모든 필드를 복사해야합니다. 올바른 방법을 찾을 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

filter 기능을 사용할 수 있습니다. 그것은 당신의 상태에 따라 배열 요소를 걸러냅니다. 물건이 배열에 있는지 확인하려면 includes 함수와 함께 사용할 수 있습니다. filterincludes가 nodejs의 최신 버전을 요구할 수있다

sourceArray = [ 
    { 
    id: 'a' 
    }, 
    { 
    id: 'b' 
    }, 
    { 
    id: 'c' 
    }, 
    { 
    id: 'd' 
    } 
] 

var toDelete = ['c', 'b'] 

sourceArray = sourceArray.filter(x => !toDelete.includes(x.id)) 
// some items in sourceArray have now been removed. 

참고 : 예를 들면.

+0

이전에 그랬지만 더 복잡한 배열에 적용하는 방법을 아직 모르고 있으며 새 배열 항목과 기존 항목을 메인 배열에서 분리하는 가장 효율적인 방법을 찾고 있습니다. 대상 시스템에서 항목을 삭제하려면 ID가 필요하지만 업데이트를 보내려면 전체 데이터 집합이 필요합니다. – NadavM

+0

@ user3541347이 방법은 모든 배열에서 잘 작동합니다. "복잡한"배열에서 작동하지 않는다고 생각하는 특별한 요구 사항은 무엇입니까? – maowtm

+0

내 실수 - 배열을 참조하는 것을 잊어 버렸습니다. 기본적으로 원래의 변수는 컨테이너 안에 배열을 가지고 있으므로 간단히 오른쪽의 변수를 참조해야했습니다. 매력처럼 작동합니다! – NadavM

관련 문제