如何使用本机javascript合并数组中的对象
我有一个api,它为我提供了正确的数据,但每个对象中的数据基本相同。我想将数组中的对象重组为一个对象 这是我的api产品当前使用的数据如何使用本机javascript合并数组中的对象,javascript,arrays,data-structures,javascript-objects,Javascript,Arrays,Data Structures,Javascript Objects,我有一个api,它为我提供了正确的数据,但每个对象中的数据基本相同。我想将数组中的对象重组为一个对象 这是我的api产品当前使用的数据 var data = [ {maincategory: "AP", maincatname: "Abrasives", subcatname: "Abrasives Accessories"}, {maincategory: "AP", maincatname: "Abrasives", subcatname: "Non-wove
var data = [
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Abrasives
Accessories"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Non-woven
Abrasives"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Bonded
Abrasives"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Wire Brushes"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Coated
Abrasives"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Specialty
Abrasives"},
{maincategory: "AP", maincatname: "Abrasives", subcatname: "Super
Abrasives"}
];
var transformed= data.map(function(obj){
var result= {
key: obj.maincategory,
values: []
}
console.log(result)
for (var key in obj) {
if (obj.hasOwnProperty(key) && key !== "maincategory") {
result.values.push([key, obj[key]]);
}
}
return result;
});
console.log(transformed);
这就是我希望数据的结构
var data = [
{
maincategory: "AP",
maincatname: "Abrasives",
subcatname: ['Abrasives Accessories','Non-woven Abrasives','Bonded Abrasives','Wire Brushes', etc]
},
];
可以将arrayreduce与Object.values一起使用。使用maincategory创建对象查找,并添加与之对应的maincategory、maincatname和subcatname,然后使用object.values从此对象中提取值
var数据=[{main类别:AP,maincatname:磨料,子类别:磨料附件},{main类别:AP,maincatname:磨料,子类别:无纺布磨料},{main类别:AP,maincatname:磨料,子类别:粘结磨料},{main类别:AP,maincatname:磨料,子类别:钢丝刷},{主类别:AP,主类别名称:磨料,子类别名称:涂层磨料},{主类别:AP,主类别名称:磨料,子类别名称:特种磨料},{主类别:AP,主类别名称:磨料,子类别名称:超级磨料}]
结果=Object.valuesdata.reducer,{maincategory,maincatname,subcatname}=>{
r[maincategory]=r[maincategory]|{maincategory,maincatname,subcatname:[]};
r[maincategory].subcatname.pushsubcatname;
返回r;
},{};
console.logresult;如果您确定它始终是相同的数据,则可以使用此函数获得结果:
function transform(data){
obj = {};
obj['maincategory'] = data[0]['maincategory'];
obj['maincatname'] = data[0]['maincatname'];
obj['subcatnames'] = data.map(function(obj){
return obj.subcatname});
return [obj]
}
老实说,最好的解决方案是修复api以返回更结构化的结果。您只需使用即可获得该输出:
var数据=[{main类别:AP,maincatname:磨料,子类别:磨料附件},{main类别:AP,maincatname:磨料,子类别:无纺布磨料},{main类别:AP,maincatname:磨料,子类别:粘结磨料},{main类别:AP,maincatname:磨料,子类别:钢丝刷},{主类别:AP,主类别名称:磨料,子类别名称:涂层磨料},{主类别:AP,主类别名称:磨料,子类别名称:特种磨料},{主类别:AP,主类别名称:磨料,子类别名称:超级磨料}]
const r=data.reducer,c=>r.subcatname=[…Array.isArrayr.subcatname
?r.subcatname
:[r.subcatname],c.subcatname],r
console.LogrTanks获取答案,而所有答案都提供相同的输出。此答案最容易理解。感谢所有人提供的答案。