2016-07-14 1 views
0

2 개의 JSON을 비교하기 위해 deep-diff Node.js 라이브러리를 사용합니다. 비교를위한 필드를 생략하기위한 사전 필터 조건도 있습니다. 필자의 사전 필터 조건이 다중 속성 인 경우 어떻게 지정합니까? 주어진 예에서 사전 필터 속성은 name입니다. 하나 이상의 속성을 추가하려면 어떻게 지정해야합니까? 미리 감사드립니다.프리 필터 조건 - deep-diff Node.js

var diff = require('deep-diff').diff; 

     var lhs = { 
      name: 'my object', 
      description: 'it\'s an object!', 
      details: { 
       it: 'has', 
       an: 'array', 
       with: ['a', 'few', 'elements'] 
      } 
     }; 

     var rhs = { 
      name: 'updated object', 
      description: 'it\'s not an object!', 
      details: { 
       it: 'has', 
       an: 'array', 
       with: ['a', 'few', 'more', 'elements', { 
        than: 'before' 
       }] 
      } 
     }; 


     var differences = diff(lhs, rhs, function(path, key) { 

      return key === 'name'; 
     }); 

     console.log(differences); 

답변

1

정확하게 이해했다면 또는 (||)을 추가하는 것만 큼 간단해야합니다. 당신은 쓸 수 있습니다 예를 들어,뿐만 아니라 설명을 무시합니까 : 물론

var differences = diff(lhs, rhs, function(path, key) { 
    return key === 'name' || key === 'description'; 
}); 

, 당신은 많은 항목을 무시 시작 당신이 무시하려는 속성/경로의 배열을 도입 할 수 있습니다 다음 단순히 체크로 현재 속성을 무시해야하는 경우 사전 필터링합니다. 그래서 배열과 좀 더 일반적인 방법은 다음과 같이 될 수있다 :

var ignoredProperties = ['prop1', 'prop2', 'prop3']; 
var differences = diff(lhs, rhs, function(path, key) { 
    return ignoredProperties.indexOf(key) >= 0; 
}); 

는 ECMAScript를 2016으로도이 경우에 더 좋을 것이다 Set 객체가 있지만이 광범위하게 구현되지 않기 때문에 아직 나는 위의 코드를 사용합니다.

+0

당신은 하드 코딩 된 값을주는 대신에보다 일반적인 방법으로이 작업을 도와 줄 수 있습니다. 예를 들어 값 배열의 함수를 전달하는 것입니다. TIA – jojo

+0

var inputArray = [ "name", "description"]; VAR 차이 = 키 DIFF (좌, 우, 함수 (경로) { VAR의 truthValue = 거짓 참인 (I inputArray의 VAR) { 경우 (키 === I) { truthValue =; } } return truthValue; }); – jojo

+0

내 답변이 업데이트되었습니다. 도움이되기를 바랍니다. – DAXaholic