보다 더 효율적 사항 Array.indexOf 수있는 방법 : indexOf with multiple arguments이 질문은이 질문에 대한 경쟁 답변에서 영감 사항 Array.some
는 사용자가 하나 이상의의 존재에 대한 배열을 테스트하는 효율적인 방법을 알고 싶어 배열에 주어진 정수. 특히 배열과 숫자 123
, 124
및 125
이 주어진 경우 주어진 배열에 하나 이상의 정수가 있는지 어떻게 알 수 있습니까? 두 솔루션을 제안했다 :
이 indexOf()
사용 :
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var exists = array.indexOf(123) !== -1 || array.indexOf(124) !== -1 || array.indexOf(125) !== -1;
또는를 some()
를 사용하여 :
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var exists = array.some(function(item) {
return item === 123 || item === 124 || item === 125;
});
모두
indexOf()
및
some()
단락의 ECMA-262 알고리즘을 성공적으로 경기를 발견, 하지만 일치가 없을 때
some()
구현이 더 빠를 것이라고 생각했을 것입니다. 그러나 다른 사용자는
indexOf()
솔루션
is faster을 지적했습니다.
indexOf()
코드는 배열을 여러 번 반복해야하지만 코드가 더 효율적입니까?
'.indexOf'는 함수 호출의 오버 헤드가 없기 때문에 상상할 수 있습니다. 'some'은 아마도 더 큰 배열에 대해 더 효율적일 것입니다. – Blender
'Array.prototype.indexOf'는 요소가 발견되지 않으면'-1'을 반환하고'=== 0'은 의도 한 것이 아니며'! == -1 '이어야한다고 가정합니다 – ASDFGerte
다른 브라우저 사용 , 테스트를 여러 번 실행하면 결과가 달라집니다. Chrome 52에서는 test2가 빠릅니다. Firefox 50에서는 test1이 빠릅니다. 그 중 하나가 다른 것보다 빠르다는 것이 확실하지 않습니다. – noKid