본문 바로가기
프론트엔드/javascript

배열에서 id 로 object를 찾는 방법

by 느바 2022. 3. 25.
반응형

배열에서 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
 

JSBench.me - JavaScript performance benchmarking playground

 

jsbench.me

 

JSBench.me - JavaScript performance benchmarking playground

 

jsbench.me

 

JSBench.me - JavaScript performance benchmarking playground

 

jsbench.me

 

JSBench.me - JavaScript performance benchmarking playground

 

jsbench.me

 

출처 :Find object by id in an array of JavaScript objects

 

Find object by id in an array of JavaScript objects

I've got an array: myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.] I'm unable to change the structure of the array. I'm being passed an id of 45, and I want to get 'bar' for that

stackoverflow.com

 

반응형