我的数组如下:
[{
data: 3454
id: 1
index: 36
name: "Pension"
}, {
data: 53453
id: 0
index: 36
name: "Pension"
}, {
data: 6756
id: 1
index: 37
name: "Pension"
}, {
data: 453
id: 2
index: 37
name: "Testval"
}, {
data: 999
id: 2
index: 38
name: "Testval"
}]
如何使用单循环重新排列此数组,如下所示? 我需要重新排列数据,如:
'Pension': {
0: {
36: 53453
}
1: {
36: 3454,
37: 6756
}
},
'Testval': {
2: {
37: 453
}
},
我试过循环,但它有6-7个循环。我需要做更少的循环。
答案 0 :(得分:1)
对于非给定对象,您可以使用默认值的单个循环。稍后分配值。
var array = [{ data: 3454, id: 1, index: 36, name: "Pension" }, { data: 53453, id: 0, index: 36, name: "Pension" }, { data: 6756, id: 1, index: 37, name: "Pension" }, { data: 453, id: 2, index: 37, name: "Testval" }, { data: 999, id: 2, index: 38, name: "Testval" }],
result = {};
array.forEach(function (o) {
result[o.name] = result[o.name] || {};
result[o.name][o.id] = result[o.name][o.id] || {};
result[o.name][o.id][o.index] = o.data;
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
对任意嵌套对象采用更动态的方法。
var array = [{ data: 3454, id: 1, index: 36, name: "Pension" }, { data: 53453, id: 0, index: 36, name: "Pension" }, { data: 6756, id: 1, index: 37, name: "Pension" }, { data: 453, id: 2, index: 37, name: "Testval" }, { data: 999, id: 2, index: 38, name: "Testval" }],
result = {};
array.forEach(function (o) {
[o.name, o.id].reduce(function (r, k) {
return r[k] = r[k] || {};
}, result)[o.index] = o.data;
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
你可以使用java中的单循环数组来实现这个目的:
我想这是有效的方法。试试吧。