본문 바로가기

JS

[JS] 객체 안의 값과 배열의 값이 같을 때 값을 리턴하는 방법 (FINDINDEX 사용)

findIndex를 사용하여 배열 안의 객체의 특정 값이 다른 배열에 포함되어 있을 때 해당 값을 찾으려면, 다음과 같이 코드를 작성할 수 있습니다:

const arrayWithObjects = [{ test1: '111', test2: '222' }, { test1: '333', test2: '444' }];
const valuesArray = ['111', '333'];

// `findIndex`를 사용하여 조건에 맞는 객체의 인덱스를 찾습니다.
const index = arrayWithObjects.findIndex(obj => valuesArray.includes(obj.test1));

console.log(index); // 결과: 0 (첫 번째 객체의 test1 값이 '111'이므로 조건에 맞음)

 

위 코드에서 findIndexarrayWithObjects의 각 객체를 순회하면서, obj.test1 값이 valuesArray에 포함되어 있는지 확인합니다. 조건이 만족되는 첫 번째 객체의 인덱스를 반환하며, 만족하는 값이 없으면 -1을 반환합니다.

  • 만약 값을 리턴하고 싶다면, 인덱스를 찾은 후에 해당 값을 추출할 수도 있습니다:
const value = index !== -1 ? arrayWithObjects[index].test1 : null;
console.log(value); // 결과: '111'

 

+ 인덱스가 여러개일 경우

인덱스가 여러 개인 경우, findIndex 대신 filtermap을 조합하여 모든 일치하는 인덱스를 찾을 수 있습니다. 예를 들어, test1 값이 valuesArray에 포함된 모든 객체의 인덱스를 반환하려면 다음과 같이 작성할 수 있습니다:

const arrayWithObjects = [{ test1: '111', test2: '222' }, { test1: '333', test2: '444' }, { test1: '111', test2: '555' }];
const valuesArray = ['111', '333'];

// 모든 일치하는 인덱스를 찾습니다.
const indices = arrayWithObjects
  .map((obj, index) => (valuesArray.includes(obj.test1) ? index : -1)) // 조건에 맞는 경우 인덱스, 아니면 -1
  .filter(index => index !== -1); // 유효한 인덱스만 남김

console.log(indices); // 결과: [0, 1, 2]
  1. map을 사용하여 arrayWithObjects의 각 객체를 순회하고, valuesArray에 포함된 test1 값을 가진 객체라면 해당 인덱스를 반환하고, 그렇지 않으면 -1을 반환합니다.
  2. filter를 사용하여 -1이 아닌 인덱스만 남깁니다.

이 결과로, valuesArray의 값과 일치하는 test1 값을 가진 객체의 모든 인덱스 배열 [0, 1, 2]가 출력됩니다.