배열의 각 요소를 순서대로 테스트해야하므로 개체에 대해 반복적으로 수행해야합니다. 이것은 전형적으로 깊은 비교 또는 깊은 평등으로 알려져 있습니다. 비교 대상의 유형을 확인하는 재귀 함수를 사용하여이 작업을 수행 할 수 있어야합니다.
부동 소수점 값을 비교할 때 허용 오차를 사용하는 것이 좋습니다. 서로 다른 두 숫자를 뺀 값의 절대 값을 취한 다음이를 선택한 고정 된 공차 값 또는 엡실론이라는 작은 숫자와 비교하여이 작업을 수행합니다.
자바 스크립트에서는, 기계 엡실론 Number.EPSILON로서 사용할 수 있으며, 1보다 큰 그리고 1 가 Number
으로서 표현 될 수있는 가장 작은 수의 차이로 정의된다. 유사한 상수는 대부분의 언어에서 사용할 수 있으며 일반적으로 허용 오차 기반 비교에 사용됩니다.
공차 기반 비교는 단순 항등식에서 부동 소수점 비교로 부동 소수점 비교를 변환하고 비교합니다. , a
및 b
의 차이가 tolerance
보다 작은 경우
var tolerance = Number.EPSILON;
if (Math.abs(a - b) < tolerance) { ... }
: 일반적
if (a === b) { ... }
을 써서 경우에 당신은 절대 값과 tolerance
를 사용하여 부동 소수점 불확실성을 제거하는 것을 써서 당신은 그들을 평등하게 대합니다.
더 미묘한 (경우에 따라 과도한 경우) 방법은 The Floating Point Guide's section on comparison을 참조하십시오. 거기에 제시된 구현은 Java에서 있지만, 많은 노력 없이도 JavaScript로 이식 할 가능성이 높습니다.
재귀 동등성 테스터를 작성해야합니다. 그리고 부동 소수점 숫자가되면'=='보다는 관용과 비교해야합니다. – Barmar
JSON.stringify를 사용하여 객체를 비교하는 것은 순서가 보장되지 않으므로 좋은 생각이 아니므로 두 객체는 동일한 속성과 값을 가질 수 있지만 "같지 않음"으로 평가할 수 있습니다. 속성과 값을 반복해야하는데, 이미 * 많은 것에 대한 많은 질문이 있습니다 (http://stackoverflow.com/search?q=%5Bjavascript%5D+compare+objects). – RobG