배열을 따라 반복하지 않고 조건과 일치하는 객체의 인덱스를 어떻게 얻을 수 있습니까?
당신은 무언가 를 배열을 통해 반복해야합니다 (적어도 한 번).
조건이 많이 바뀌면 반복해서 객체를 살펴보고 조건과 일치하는지 확인해야합니다. 그러나 ES5 기능이있는 시스템 (또는 shim을 설치 한 경우)에서 해당 반복을 상당히 간결하게 수행 할 수 있습니다.
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
new (ish) Array#some
함수를 사용합니다. 이 함수는 사용자가 제공 한 함수가 true를 반환 할 때까지 배열의 항목을 반복합니다. 내가 제공 한 함수는 일치하는 항목의 색인을 저장 한 다음 true
반복을 중지하기 위해 반환 합니다.
또는 물론 for
루프를 사용하십시오 . 다양한 반복 옵션은 이 다른 답변 에서 다룹니다 .
그러나이 조회에 항상 동일한 속성을 사용하려는 경우 속성 값이 고유 한 경우 한 번만 반복하고 객체를 만들어 매핑 할 수 있습니다.
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
또는 다시 for
루프 또는 다른 옵션을 사용할 수 있습니다 .
그런 다음로 항목을 찾아야 할 경우 다음 prop2 = "yutu"
을 수행 할 수 있습니다.
var entry = prop2map["yutu"];
나는 이것을 "교차 색인"이라고 부른다. 당연히 항목을 제거하거나 추가하거나 prop2
값을 변경하는 경우 매핑 개체도 업데이트해야합니다.
0
?에 있다고 가정하십시오 ). 두 솔루션 모두 필요한 것보다 더 많은 반복을 수행합니다. 배열이 클 경우 이상적이지 않습니다 (검색이 많이 발생하지 않는 한 사람이 너무 클 가능성은 낮지 만 ).