我有以下格式的数据..
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},
.
.
.
]
基于答案here ..我试过..
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作为结果对象中的第三个属性..
真心感谢任何帮助。
由于
答案 0 :(得分:2)
您可能希望reduce
sub
对象指向该项的属性。
以下代码将array
中的项目映射到新数组,其中包含展平的项目:
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;
});
答案 1 :(得分:2)
试试这个。
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)
});