Javascript 扁平化json,使一个属性为key,另一个属性为value

Javascript 扁平化json,使一个属性为key,另一个属性为value,javascript,json,Javascript,Json,我有以下格式的数据 var array = [{"name":"abc","boss":"def","sub":[{"schema":"a","data":1},{"schema":"b","data":0},{"schema":"c","data":0}]}, . . . ] 我希望将其转换为以下结构: [{"name":"abc","boss":"def","a":1,"b":0,"c":0}, . . . ] 根据答案。。我试过 grouped = []

我有以下格式的数据

var array = [{"name":"abc","boss":"def","sub":[{"schema":"a","data":1},{"schema":"b","data":0},{"schema":"c","data":0}]},
.
.
.
]
我希望将其转换为以下结构:

[{"name":"abc","boss":"def","a":1,"b":0,"c":0},
    .
    .
    .
    ]
根据答案。。我试过

grouped = [];
array.forEach(function (a) {
    if (!this[a.name]||!this[a.boss]) {
        this[a.name] = { name: a.name, boss:a.boss };
        grouped.push(this[a.name]);
       }
    this[a.name][a.sub.schema] = (this[a.name][a.sub.schema] || 0) + a.sub.data;
}, Object.create(null));

console.log(grouped);
上面给出了undefined:NaN作为结果对象中的第三个属性

我们衷心感谢您的帮助


谢谢

您可能希望
对象减少为项目的属性

以下代码将
数组中的项映射到一个新数组,该数组包含展开的项:

array = array.map(function(item) {
   item = item.sub.reduce(function(x,y) { return x[y.schema] = y.data, x; }, item);
   delete item.sub;
   return item;
});

您可能希望
对象减少为项目的属性

以下代码将
数组中的项映射到一个新数组,该数组包含展开的项:

array = array.map(function(item) {
   item = item.sub.reduce(function(x,y) { return x[y.schema] = y.data, x; }, item);
   delete item.sub;
   return item;
});
简单地试试这个

var arr = [];
array.forEach(function(ele){
  var obj = {};obj.name=ele.name;
  obj.boss=ele.boss;
  ele.sub.forEach(function(e){
    obj[e.schema] = e.data
  });
  arr.push(obj)
});
简单地试试这个

var arr = [];
array.forEach(function(ele){
  var obj = {};obj.name=ele.name;
  obj.boss=ele.boss;
  ele.sub.forEach(function(e){
    obj[e.schema] = e.data
  });
  arr.push(obj)
});

a.sub
是一个数组。您必须对其进行迭代
a.sub
是一个数组。您必须重复使用
逗号运算符,就像使用
逗号运算符一样