문제

자바 스크립트 코드에서 2 개의 객체 배열을 비교하고 싶습니다.개체에는 총 8 개의 속성이 있지만 각 개체에는 각각에 대한 값이 없으며 배열은 각각 8 개 항목보다 크지 않을 것입니다.8 개의 속성은 내가하고 싶은 일을하는 가장 쉬운 방법이지만, 구현하기 전에 누군가가 더 우아한 솔루션을 가지고 있는지보고 싶었습니다.어떤 생각?

도움이 되었습니까?

해결책

편집 : JavaScript 인터프리터의 현재 일반적인 브라우저 기반 구현에서 연산자를 오버로드 할 수 없습니다.

원래의 질문에 답하기 위해이 작업을 수행 할 수있는 한 가지 방법은 약간의 해킹입니다. 두 배열을 JSON으로 직렬화 한 다음 두 JSON 문자열을 비교합니다. 이는 단순히 배열이 다른지 여부를 알려줍니다. 분명히 배열 내의 객체 에 대해이 작업을 수행하여 어떤 것이 다른지 확인할 수 있습니다.

또 다른 옵션은 객체 비교를위한 멋진 기능이있는 라이브러리를 사용하는 것입니다. MochiKit <을 사용하고 권장합니다. / strong> . <시간>

수정 : 가 멘스의 답변 두 개의 주어진 객체를 비교하는 단일 함수는 내가 제안한 작업을 수행하는 라이브러리보다 훨씬 작기 때문에 고려할 가치가 있습니다 (제 제안은 확실히 충분히 잘 작동 할 것입니다).

다음은 사용자에게 충분할 수있는 순진한 구현입니다.이 구현에는 잠재적 인 문제가 있음을 유의하세요. 라코 디스

두 개체가 동일한 속성 목록을 가지고 있다고 가정합니다.

아, 좋든 나쁘 든 내가 단 한 번의 복귀 지점 캠프에 속한다는 것은 분명합니다. :)

다른 팁

이것이 오래된 질문이고 제공된 답변이 잘 작동한다는 것을 알고 있습니다 ... 그러나 이것은 조금 더 짧고 추가 라이브러리 (예 : JSON)가 필요하지 않습니다. 라코 디스

솔직히, 최대 8 개의 개체와 개체 당 최대 8 개의 속성을 사용하는 경우 가장 좋은 방법은 각 개체를 가로 질러 직접 비교하는 것입니다.빠르고 쉬울 것입니다.

이러한 유형의 비교를 자주 사용한다면 JSON 직렬화에 대해 Jason의 의견에 동의합니다. 그렇지 않으면 새 라이브러리 나 JSON 직렬화 코드로 앱 속도를 늦출 필요가 없습니다.

저는 두 개체의 내용을 비교하고 이해하기 쉬운 차이점 목록을 반환하기 위해 간단한 알고리즘을 약간 작업했습니다.내가 나눌 것이라고 생각했다.jQuery에 대한 몇 가지 아이디어, 즉 map 함수 구현과 객체 및 배열 유형 검사를 차용합니다.

Diff 정보가있는 배열 인 "diff 객체"목록을 반환합니다.매우 간단합니다.

여기 있습니다 : 라코 디스

나는 JSON.stringify()를 시도하고 나를 위해 일했습니다. 라코 디스

일반적으로 직렬화가 작동하지 않기 때문에 (속성 순서가 일치 할 때만 : JSON.stringify({a:1,b:2}) !== JSON.stringify({b:2,a:1})) 속성 수를 확인하고 각 속성도 비교해야합니다.

라코 디스

심층 비교가 필요한 경우 함수를 재귀 적으로 호출 할 수 있습니다.

라코 디스

그러면이 함수를 사용하여 배열의 개체를 쉽게 비교할 수 있습니다. 라코 디스

다음을 시도해보세요 : 라코 디스

다음은 노드의 assert 모듈 을 사용한 제 시도입니다. +npm 패키지 object-hash .

두 배열간에 순서가 다르더라도 두 배열에 동일한 개체가 포함되어 있는지 확인하고 싶다고 가정합니다. 라코 디스

@JasonBunting의 답변에 언급 된 objectsAreSame 함수는 저에게 잘 작동합니다.하지만 약간의 문제가 있습니다. x[propertyName]y[propertyName]가 객체 (typeof x[propertyName] == 'object') 인 경우이를 비교하려면 함수를 재귀 적으로 호출해야합니다.

lodash의 _.some 사용 : https://lodash.com/docs/4.17.11#일부 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top