可以使用reduce
函数和Object.values
方法来实现按多个键将数组对象分组和扁平化的操作。
下面是一个示例代码:
const data = [
{ id: 1, category: "A", subcategory: "X", value: 10 },
{ id: 2, category: "A", subcategory: "Y", value: 20 },
{ id: 3, category: "B", subcategory: "X", value: 30 },
{ id: 4, category: "B", subcategory: "Y", value: 40 },
{ id: 5, category: "C", subcategory: "Z", value: 50 }
];
const groupByKeys = (data, keys) => {
return data.reduce((result, obj) => {
const groupKey = keys.map(key => obj[key]).join("-");
if (!result[groupKey]) {
result[groupKey] = [];
}
result[groupKey].push(obj);
return result;
}, {});
};
const flattenGroupedData = group => {
return Object.values(group).reduce((result, arr) => {
return result.concat(arr);
}, []);
};
const groupedData = groupByKeys(data, ["category", "subcategory"]);
console.log(groupedData);
const flattenedData = flattenGroupedData(groupedData);
console.log(flattenedData);
这段代码首先定义了一个名为data
的数组,其中包含了一些对象。
然后定义了一个名为groupByKeys
的函数,该函数接受两个参数:data
和keys
。data
是要分组的数组,keys
是要按照哪些键进行分组的数组。函数内部使用reduce
方法遍历data
,根据keys
数组中的键值,将对象分组并存储到一个新的对象中,最后返回这个新的对象。
接下来定义了一个名为flattenGroupedData
的函数,该函数接受一个参数group
,即分组后的对象。函数内部使用Object.values
方法将分组后的对象的值转换成一个数组,并使用reduce
方法将数组扁平化,最后返回扁平化后的数组。
最后使用groupByKeys
函数将data
按category
和subcategory
分组,并将结果存储在groupedData
变量中。然后使用flattenGroupedData
函数将groupedData
扁平化,并将结果存储在flattenedData
变量中。
最后将groupedData
和flattenedData
输出到控制台进行验证。