Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用本机javascript合并数组中的对象_Javascript_Arrays_Data Structures_Javascript Objects - Fatal编程技术网

如何使用本机javascript合并数组中的对象

如何使用本机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

我有一个api,它为我提供了正确的数据,但每个对象中的数据基本相同。我想将数组中的对象重组为一个对象

这是我的api产品当前使用的数据

 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获取答案,而所有答案都提供相同的输出。此答案最容易理解。感谢所有人提供的答案。