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'이므로 조건에 맞음)
위 코드에서 findIndex는 arrayWithObjects의 각 객체를 순회하면서, obj.test1 값이 valuesArray에 포함되어 있는지 확인합니다. 조건이 만족되는 첫 번째 객체의 인덱스를 반환하며, 만족하는 값이 없으면 -1을 반환합니다.
- 만약 값을 리턴하고 싶다면, 인덱스를 찾은 후에 해당 값을 추출할 수도 있습니다:
const value = index !== -1 ? arrayWithObjects[index].test1 : null;
console.log(value); // 결과: '111'
+ 인덱스가 여러개일 경우
인덱스가 여러 개인 경우, findIndex 대신 filter와 map을 조합하여 모든 일치하는 인덱스를 찾을 수 있습니다. 예를 들어, 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]
- map을 사용하여 arrayWithObjects의 각 객체를 순회하고, valuesArray에 포함된 test1 값을 가진 객체라면 해당 인덱스를 반환하고, 그렇지 않으면 -1을 반환합니다.
- filter를 사용하여 -1이 아닌 인덱스만 남깁니다.
이 결과로, valuesArray의 값과 일치하는 test1 값을 가진 객체의 모든 인덱스 배열 [0, 1, 2]가 출력됩니다.
'JS' 카테고리의 다른 글
[React] <React.Fragment> 용도 (0) | 2024.11.26 |
---|---|
[React] 기존 값은 유지하면서 특정 값만 바꾸려고 하는 경우(useState, produce) (0) | 2024.11.26 |
[JS] 객체에 있는 값을 배열로 만드는 방법 (0) | 2024.11.26 |
[React] useCallback((sender) => {},[deps],); (0) | 2024.11.26 |
[React] ClassName을 동적처리 하고 싶은 경우 (0) | 2024.11.26 |