2017-05-05 1 views
0

객체의 속성 값이과 같이 변경되었는지 확인하는 비교 함수가 있습니다.Lodash - 객체의 변경된 속성을 보여줍니다.

private checkForChanges(): boolean { 
    if (_.isEqual(this.definitionDetails, this.originalDetails) === true) { 
     return false; 
    } else { 
     return true; 
    } 
} 

이 기능은 훌륭하지만 지금은 변경 사항이있을 경우 어떤 속성이 변경되는지 console.log 변경하려고합니다.

console.log(_.difference(_.keys(this.originalDetails), _.keys(this.definitionDetails))); 

을하지만 난 항상 [] 그래서 난 내 구문이 잘못 가정 얻을 :

나는 이것을 시도했습니다.

내가 원하는 것을 달성하기위한 올바른 방법은 무엇입니까?

+0

어떤 로다시 버전을 사용하고 있습니까? – Meir

+0

@Meir using version 4.17.4 – Nicolas

+0

이 두 개체의 속성 이름 또는이 속성의 값을 비교 하시겠습니까? 지금 내가 잘못 본 것이 아니라면 처음이다. – Philipp

답변

2

값이 변경되면 _.isEqual은 false를 반환 할 수 있습니다. 이는 키가 동일하게 유지되는 경우에도 발생할 수 있습니다.

예 : {x: 11, y: 12}, and {x: 11, y: 13}은 여전히 ​​동일한 키를 가지고 있지만 false를 반환합니다.

_.difference()은 키를 비교합니다.

당신이 자신의 기능을 구현해야합니다 변경 키를 얻으려면 :

function changedKeys(o1, o2) { 
    var keys = _.union(_.keys(o1), _.keys(o2)); 
    return _.filter(keys, function(key) { 
    return o1[key] !== o2[key]; 
    } 
} 
0

이 기능은 변경되는 모든 키를 반환합니다. Meir 솔루션이 저에게 효과적이지 않습니다. 그의 솔루션은 변경되지 않은 모든 배열 값을 반환합니다. 그래서 조금 비틀어졌습니다.

function(o1, o2) { 
    var keys = _.union(_.keys(o1), _.keys(o2)); 
    return _.filter(keys, function(key) { 
    return !_.eq(o1[key].toString(), o2[key].toString()); 
    }) 
} 
관련 문제