我有一个对象数组,如下所示:
const array = [{label: "Color", content: "red"},{label: "Color", content: "blue"},{label: "Brand", content: "HI6"},{label: "Brand", content: "Zina"},{label: "Year", content: "2020"}];
我想要对其进行重组以使其看起来像这样:
const array = [{label: "Color", content: ["red","blue"]},{label: "Brand", content: ["HI6", "Zina"]},{label: "Year", content: "2020"}];
有什么想法吗?
答案 0 :(得分:0)
const array = [{label: "Color", content: "red"},{label: "Color", content: "blue"},{label: "Brand", content: "HI6"},{label: "Brand", content: "Zina"},{label: "Year", content: "2020"}];
const mergeProperties = array => {
const output = [];
array.forEach( item => {
if(!item.hasOwnProperty('label') || !item.hasOwnProperty('content')){
return;
}
const alreadyExisting = output.find( outputItem => outputItem.label === item.label );
if(alreadyExisting){
alreadyExisting.content.push(item.content);
}else{
output.push({
label: item.label,
content: [item.content]
})
}
})
return output;
}
console.log(mergeProperties(array));
https://jsfiddle.net/fg1qjc03/
基本策略是跟踪输出数组,这将是结果。浏览每个项目时,请检查该项目的标签是否已添加到输出中。如果是这样,您只需添加当前项目的内容。如果还没有(这是第一次),则将一个全新的条目添加到输出中(包括当前项目的内容)。
答案 1 :(得分:0)
如果尚未添加项目,则可以使用Array#reduce进行添加;如果已经存在,则可以对其进行编辑。
即
const array = [{
label: "Color",
content: "red"
}, {
label: "Color",
content: "blue"
}, {
label: "Brand",
content: "HI6"
}, {
label: "Brand",
content: "Zina"
}, {
label: "Year",
content: "2020"
}];
console.log(Object.values(array.reduce(function(result, item) {
if (item.label in result) result[item.label].content.push(item.content);
else result[item.label] = {
label: item.label,
content: [item.content]
};
return result;
}, {})));
答案 2 :(得分:0)
您可以按如下方式使用功能reduce
和功能Object.values
:
基本上,函数reduce
通过label
对对象进行分组,而函数Object.values
则将已分组的对象作为数组进行检索。
const array = [{label: "Color", content: "red"},{label: "Color", content: "blue"},{label: "Brand", content: "HI6"},{label: "Brand", content: "Zina"},{label: "Year", content: "2020"}],
result = Object.values(array.reduce((r, {label, content}) => {
(r[label] || (r[label] = {label, content: []})).content.push(content);
return r;
}, {}));
console.log(result);