728x90
배열에서 id 로 object를 찾는 방법
"Find object by id in an array of JavaScript objects
stackoverflow에서
id를 매치하여 object를 찾는 방법에 대해
굉장히 좋은 글을 발견해
내용을 이 곳에 옮겨본다.
테스트 방법
id로 특정 object를 찾는 방법에 총 11가지 방법을 사용하여 속도 테스트를 하였다.
총 11가지 방법은 다음과 같다.
A : find
B : findIndex
C : filter
D : reduce
E : for
F : $.each
G : $.grep
H : $.map
I : _.find
J : cache
K : map
L :object {}
테스트 결과
Conclusions for solutions which use precalculations
K 와 L 은 미리 배열을 계산해 놓은 방법인데,
K 와 L 은 다른 다른 방법들과 비교가 되지 않을 정도로 가장 빠르다.
let myArray = [...Array(10)].map((x,i)=> ({'id':`${i}`, 'foo':`bar_${i}`}));
const mapK = new Map( myArray.map(el => [el.id, el]) ); // For precalculated solution
function K(arr, id) {
return mapK.get(id)
}
test(K);
let myArray = [...Array(10)].map((x,i)=> ({'id':`${i}`, 'foo':`bar_${i}`}));
const mapL = {}; myArray.forEach(el => mapL[el.id]=el); // For precalculated solution
function L(arr, id) {
return mapL[id];
}
test(L);
Conclusions when searched objects ALWAYS exists
검색되는 오브젝트가 존재하는 경우,
small array 에서는 Efor
가 가장 빠르다.
big array 에서는 J 가 가장 빠르다.
Conclusions when searched objects NEVER exists
검색되는 오브젝트가 존재하지 않을 경우,
small array 에서는 Afind
, Efor
가 가장 빠르다.
big array 에서는 Efor
가 가장 빠르다.
function A(arr, id) {
return arr.find(o=> o.id==id);
}
test(A);
function E(arr, id) {
for (var i = 0; i < arr.length; i++) if (arr[i].id==id) return arr[i];
return null;
}
test(E);
- small array (10 elements) and searched object ALWAYS exists - you can perform it HERE
- big array (10k elements) and searched object ALWAYS exist - you can perform it HERE
- small array (10 elements) and searched object NEVER exists - you can perform it HERE
- big array (10k elements) and searched object NEVER exists - you can perform it HERE
출처 :Find object by id in an array of JavaScript objects
728x90
'프론트엔드 > javascript' 카테고리의 다른 글
SPA에서 History API 이해 (0) | 2023.10.16 |
---|---|
Web APIs - window size & browser coordinate & scroll (0) | 2022.04.06 |
노드 동적 생성과 DocumentFragment (0) | 2022.02.03 |
fetch 함수로 html 문서 로드하기 (0) | 2022.01.14 |
collapse toggle(show&hide) vanilla javascript (0) | 2022.01.11 |