我有一个对象数组,需要将其转换为表格(类似于数据透视)。这么说,我需要获取另一个具有唯一标题的对象数组,其中包含带有值对的嵌套对象数组。您能看一下这个并帮助实现我所需要的吗?请查看下面的原始数组和所需的数组:
原始数组:
[
{title: "Title1", value1: "value1", value2: "value2"},
{title: "Title2", value1: "value1", value2: "value2"},
{title: "Title1", value1: "value1", value2: "value2"},
{title: "Title3", value1: "value1", value2: "value2"},
{title: "Title2", value1: "value1", value2: "value2"},
{title: "Title1", value1: "value1", value2: "value2"},
{title: "Title3", value1: "value1", value2: "value2"},
{title: "Title1", value1: "value1", value2: "value2"},
]
Run Code Online (Sandbox Code Playgroud)
期望的结果:
[
{title: "Title1", values: [{value1: "value1"}, {value2: "value2"}]},
{title: "Title2", values: [{value1: "value1"}, {value2: "value2"}]},
{title: "Title3", values: [{value1: "value1"}, {value2: "value2"}]},
]
Run Code Online (Sandbox Code Playgroud)
感谢您提前提供任何建议。
一个简单的数组缩减可能会有所帮助
let data = [{
title: "Title1",
value1: "value1",
value2: "value2"
}, {
title: "Title2",
value1: "value1",
value2: "value2"
}, {
title: "Title1",
value1: "value1",
value2: "value2"
}, {
title: "Title3",
value1: "value1",
value2: "value2"
}, {
title: "Title2",
value1: "value1",
value2: "value2"
}, {
title: "Title1",
value1: "value1",
value2: "value2"
}, {
title: "Title3",
value1: "value1",
value2: "value2"
}, {
title: "Title1",
value1: "value1",
value2: "value2"
}];
let pivoted = data.reduce((prev, cur) => {
let existing = prev.find(x => x.title === cur.title);
if (existing)
existing.values.push(cur)
else
prev.push({
title: cur.title,
values: [cur]
});
return prev;
}, []);
console.log(pivoted);Run Code Online (Sandbox Code Playgroud)
使用的API
然后可以根据您想要的任何字段进行调整,但是如果该字段不存在,则需要添加错误处理:
let pivotBy = (key, data) => data.reduce((prev, cur) => {
let existing = prev.find(x => x[key] === cur[key]);
if (existing) {
existing.values.push(cur);
} else {
let toInsert = {
values: [cur]
}
toInsert[key] = cur[key];
prev.push(toInsert);
}
return prev;
}, []);
Run Code Online (Sandbox Code Playgroud)
编辑 我误解了您想要的输出格式,但是可以修改减少方法来满足该要求。