2017-11-02 1 views
1

나는 질서 정할 필요가없는 두 개의 배열을 비교하고 싶습니다. 나는 ImmutableJS (fromJS)를 사용하려고 시도했지만 정렬되지 않은 배열에서는 작동하지 않습니다. 여야 예를 배열 제발 봐 동일정렬되지 않은 배열을 깊이 비교하는 방법은 무엇입니까?

먼저 배열

[ 
     { 
      Jnam: 'processor', 
      Ci: 'New York', 
     }, 
     { 
      Jnam: 'keyboard', 
      Ci: 'Washington', 
     }, 
     { 
      Jnam: 'display', 
      Ci: 'Seattle', 
     }, 
] 

둘째

[ 
     { 
      Jnam: 'keyboard', 
      Ci: 'Washington', 
     }, 
     { 
      Jnam: 'processor', 
      Ci: 'New York', 
     }, 
     { 
      Ci: 'Seattle', 
      Jnam: 'display', 
     }, 
] 

당신이 상황 인 것을 일을 내 질문에 대답 수 있을까요?

+3

이유는 단지 그들에게 모두 첫 번째 정렬 할? –

+0

그리고 원하는 결과는 무엇입니까? 그냥 '사실'또는 '거짓'? –

+0

[Javascript 배열 - 동일한 내용에 대해 객체의 배열 두 개를 확인하고 순서를 무시 함]의 가능한 복제본 (https://stackoverflow.com/questions/3243275/javascript-arrays-checking-two-arrays-of-objects-for-same) -contents-ignoring-o) –

답변

1

첫 번째 속성으로 키를 사용하고 두 번째 속성으로 값을 사용하여 두 번째 배열을 확인하는 해시 테이블을 만들 수 있습니다.

해시가 발견되면 정확한 수를 확인하기 위해 해시가 감소합니다.

function getKeyValue(object) { 
 
    var keys = Object.keys(object).sort(); 
 

 
    return { key: keys.join('|'), value: keys.map(function (k) { return object[k]; }).join('|') }; 
 
} 
 

 
var first = [{ Jnam: 'processor', Ci: 'New York', }, { Jnam: 'keyboard', Ci: 'Washington' }, { Jnam: 'display', Ci: 'Seattle' }], 
 
    second = [{ Jnam: 'keyboard', Ci: 'Washington', }, { Jnam: 'processor', Ci: 'New York' }, { Ci: 'Seattle', Jnam: 'display' }], 
 
    hash = Object.create(null), 
 
    count = 0, 
 
    result; 
 

 
first.forEach(function (o) { 
 
    var kv = getKeyValue(o); 
 
    hash[kv.key] = hash[kv.key] || {}; 
 
    hash[kv.key][kv.value] = (hash[kv.key][kv.value] || 0) + 1; 
 
    count++; 
 
}); 
 

 
result = second.every(function (o) { 
 
    var kv = getKeyValue(o); 
 
    count--; 
 
    if (hash[kv.key] && hash[kv.key][kv.value]) { 
 
     hash[kv.key][kv.value]--; 
 
     return true; 
 
    } 
 
}) && !count; 
 

 
console.log(result); 
 
console.log(hash);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

그것은 흥미로운 해결책입니다. 많은 감사합니다! – AZawalar

관련 문제