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

Nhóm mảng lồng nhau trong JavaScript

Giả sử, chúng ta có một mảng các giá trị như thế này -

const arr = [
   {
      value1:[1,2],
      value2:[{type:'A'}, {type:'B'}]
   },
   {
      value1:[3,5],
      value2:[{type:'B'}, {type:'B'}]
   }
];

Chúng tôi được yêu cầu viết một hàm JavaScript có trong một mảng như vậy. Sau đó, hàm của chúng ta sẽ chuẩn bị một mảng trong đó dữ liệu được nhóm theo thuộc tính "type" của các đối tượng.

Do đó, đối với mảng trên, đầu ra sẽ giống như -

const output = [
   {type:'A', value: [1,2]},
   {type:'B', value: [3,5]}
];

Ví dụ

Mã cho điều này sẽ là -

const arr = [
   {
      value1:[1,2],
      value2:[{type:'A'}, {type:'B'}]
   },
   {
      value1:[3,5],
      value2:[{type:'B'}, {type:'B'}]
   }
];
const groupValues = (arr = []) => {
   const res = [];
   arr.forEach((el, ind) => {
      const thisObj = this;
      el.value2.forEach(element => {
         if (!thisObj[element.type]) {
            thisObj[element.type] = {
               type: element.type,
               value: []
            }
            res.push(thisObj[element.type]);
         };
         if (!thisObj[ind + '|' + element.type]) {
            thisObj[element.type].value =
            thisObj[element.type].value.concat(el.value1);
            thisObj[ind + '|' + element.type] = true;
         };
      });
   }, {})
   return res;
};
console.log(groupValues(arr));

Đầu ra

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

[
   { type: 'A', value: [ 1, 2 ] },
   { type: 'B', value: [ 1, 2, 3, 5 ] }
]