Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 필드 중 하나와 병합하는 동안 배열을 줄이는 방법

<시간/>

다음과 같은 객체 배열이 있다고 생각해 보십시오. -

const arr = [{
   id: 121,
   hobby: 'cycling'
}, {
   id: 125,
   hobby: 'jogging'
}, {
   id: 129,
   hobby: 'reading'
}, {
   id: 121,
   hobby: 'writing'
}, {
   id: 121,
   hobby: 'playing football'
}, {
   id: 125,
   hobby: 'cooking'
}, {
   id: 129,
   hobby: 'horse riding'
}];

예를 들어, 이러한 배열을 받아 공통 id 속성을 기반으로 병합하는 함수를 작성해야 하고, 취미 속성의 경우 배열을 할당하고 특정 ID에 대한 모든 취미를 거기에 넣어야 합니다.

Array.prototype.reduce() 메서드를 사용하여 배열을 반복하고 동시에 인덱스가 같은 항목을 병합합니다.

이 작업을 수행하는 코드는 -

입니다.

예시

const arr = [{
   id: 121,
   hobby: 'cycling'
}, {
   id: 125,
   hobby: 'jogging'
}, {
   id: 129,
   hobby: 'reading'
}, {
   id: 121,
   hobby: 'writing'
}, {
   id: 121,
   hobby: 'playing football'
}, {
   id: 125,
   hobby: 'cooking'
}, {
   id: 129,
   hobby: 'horse riding'
}];
const mergeArray = (arr) => {
   return arr.reduce((acc, val) => {
      const ind = acc.findIndex(item => item.id === val.id);
      if(ind !== -1){
         acc[ind].hobby.push(val.hobby);
      }else{
         acc.push({
            id: val.id,hobby: [val.hobby]
      });
   };
   return acc;
}, []);
};
console.log(mergeArray(arr));

출력

콘솔의 출력은 -

[
   { id: 121, hobby: [ 'cycling', 'writing', 'playing football' ] },
   { id: 125, hobby: [ 'jogging', 'cooking' ] },
   { id: 129, hobby: [ 'reading', 'horse riding' ] }
]