문제 설명이 포괄적이지 않습니다
내 문제는 내 배열이 다음과 같이 정의될 때 발생합니다.
으아아아여기서 자동으로 생성된 undefine과 내가 정의한 것 사이에 차이점이 있나요?
내장된 순회 기능을 사용할 때 왜 순회할 수 없나요?으아아아
某草草2017-07-05 10:52:19
귀하가 정의한 것은 희소 배열(길이가 배열 요소 수보다 큰 배열)이기 때문에 in
를 사용하여 해당 배열 요소가 존재하는지 확인할 수 있습니다.
그리고 forEach
은 원래 인덱스가 존재하는 요소만 순회합니다.
过去多啦不再A梦2017-07-05 10:52:19
여기서 자동으로 생성된 undefine과 제가 정의한 것 사이에 차이점이 있나요?
이것은 배열의 함정입니다. 정의되지 않은 것은 그렇게 정의되지 않은 것이 아닙니다. 자동으로 생성된 슬롯은 "빈 슬롯"이라고 하며 크롬에서는 이를 정의되지 않은 것으로 표시합니다. 실제 undefound가 하나씩 출력되고, 빈 슬롯에는 "undefine × 7"이라는 단어가 출력되는 것도 볼 수 있습니다.
forEach, 지도 등은 빈 슬롯을 건너뜁니다. 솔루션을 참고해주세요
으아악淡淡烟草味2017-07-05 10:52:19
forEach는 이렇게 작성되기 때문에 내장된 forEach는 정의되지 않은 경우에도 계속됩니다.
건너뛰지 않는 버전을 직접 작성할 수 있습니다
漂亮男人2017-07-05 10:52:19
이 문제를 다른 각도에서 생각해 볼 수 있습니다.
var a = [1,2,3,4]
delete a[0]
console.log(a)//[undefine × 1, 2, 3, 4]
a.length//4
a.forEach(it=>console.log(it))// 2 3 4
질문으로 돌아가서, forEach가 캡슐화되면 이 "정의되지 않음"은 건너뛰고 다시 작성할 수 있습니다. 이 방법을 사용해보세요. 값이 어떻든 정상적으로 인쇄가 가능합니다