2014-05-09 3 views
0

나는 deepEqual을 JavaScript로 번역하려고합니다. 두 값을 비교하여 같은 값인 경우 true를 반환합니다. 이 두 값이 객체이면 재귀를 수행하여 deepEqual을 다시 호출하여 해당 객체의 값을 비교합니다.나만의 깊이있는 확인하기

나를 도울 수있는 사람이 있습니까? 가장 혼란스러운 부분은 객체의 속성을 반복하는 방법과 속성의 이름이 같고 값이 같은지 여부입니다.

function deepEqual(a, b) { 
    if ((typeof a === "object") && (typeof b === "object")) { 
     deepEqual(a, b); 
    } else { 
     if (a !== b) { 
      return false; 
     } else { 
      return true; 
     } 
    } 
} 
+1

['Object.keys'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) – EaterOfCode

+1

'if (x) {return false; } else {return true; }'''return! x; ' – Ryan

답변

0

어떤 코드가 현재하고있는 것은 정말 재귀되지 않습니다 :

나는 아래의 코드 일부를 썼다.

비교해 보려면 {}{}이라고 말해보세요. 그들은 평등하다고보고해야합니까?

코드는 간다 :

  • 전화 deepEqual({},{});
  • typeof a === "object"를 - 사실!
  • typeof b === "object" - true!
  • 따라서 deepEqual(a,b)

를 호출하지만에 걸 ... 그게 정확히 최초의 호출과 동일합니다! 좋은 무한 루프가 있습니다.

대신 특성에 ab, 및 호출 deepEqual의 특성에 for..in 루프를 사용해야합니다.

+0

고마워요, 지금은 이해가됩니다. 그런데 객체 속성에 deepEqual을 호출하려면 어떻게해야합니까? 나는 그 속성의 이름이 무엇인지 모를 것이다. 객체 속성을 통해 반복하는 코드가 있습니까? 죄송합니다, 편집 됨, object.keys << 이것은 객체 속성을 통과하는 것입니다. 감사! –