Computer >> Máy Tính >  >> Lập trình >> Javascript

Cách giảm một mảng trong khi hợp nhất một trong các trường của nó cũng trong JavaScript

Hãy xem xét, chúng ta có một mảng các đối tượng sau -

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'
}];

Giả sử, chúng ta phải viết một hàm nhận vào một mảng như vậy và hợp nhất nó dựa trên thuộc tính id chung và đối với thuộc tính sở thích, chúng tôi gán cho nó một mảng và đặt tất cả sở thích cho các id cụ thể vào đó.

Chúng tôi sẽ sử dụng phương thức Array.prototype.reduce () để lặp qua mảng và hợp nhất các mục nhập có cùng chỉ số tại cùng một thời điểm.

Mã để thực hiện việc này sẽ là -

Ví dụ

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));

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

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