Giả sử chúng ta có một mảng giá trị như sau:
const arr = [
{
value1:[1,2],
value2:[{type:'A'}, {type:'B'}]
},
{
value1:[3,5],
value2:[{type:'B'}, {type:'B'}]
}
];
Chúng ta cần viết một hàm JavaScript nhận một mảng như vậy. Hàm sẽ chuẩn bị một mảng nơi dữ liệu được gom nhóm theo thuộc tính "type" của các đối tượng.
Do đó, với mảng trên, đầu ra sẽ trông như:
const output = [
{type:'A', value: [1,2]},
{type:'B', value: [3,5]}
];
Ví dụ
Mã thực hiện:
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));
Kết quả
Kết quả trong console:
[
{ type: 'A', value: [ 1, 2 ] },
{ type: 'B', value: [ 1, 2, 3, 5 ] }
]