[
{
"level1": 1,
"level2": 1,
"Id": 1
},
{
"level1": 1,
"level2": 1,
"Id": 2
},
{
"level1": 1,
"level2": 2,
"Id": 3
},
{
"level1": 1,
"level2": 2,
"Id": 4
},
{
"level1": 2,
"level2": 1,
"Id": 5
},
{
"level1": 2,
"level2": 1,
"Id": 6
},
{
"level1": 2,
"level2": 2,
"Id": 7
},
{
"level1": 2,
"level2": 2,
"Id": 8
}
]
输出: -
[
{
"level1": 1,
"level1List": [
{
"level2": 1,
"level2List": [
{
"Id": 1
},
{
"Id": 2
}
]
},
{
"level2": 2,
"level2List": [
{
"Id": 3
},
{
"Id": 4
}
]
}
]
},
{
"level1": 2,
"level1List": [
{
"level2": 1,
"level2List": [
{
"Id": 5
},
{
"Id": 6
}
]
},
{
"level2": 2,
"level2List": [
{
"Id": 7
},
{
"Id": 8
}
]
}
]
}
]
如何使用es6
或loadesh
或其他方式获得以上输出?
答案 0 :(得分:1)
您可以将对象用作哈希表,并使用此级别的所有项目(由此级别的_
属性表示)来采用嵌套方式。
var data = [{ level1: 1, level2: 1, Id: 1 }, { level1: 1, level2: 1, Id: 2 }, { level1: 1, level2: 2, Id: 3 }, { level1: 1, level2: 2, Id: 4 }, { level1: 2, level2: 1, Id: 5 }, { level1: 2, level2: 1, Id: 6 }, { level1: 2, level2: 2, Id: 7 }, { level1: 2, level2: 2, Id: 8 }],
keys = ['level1', 'level2'],
result = [],
temp = { _: result };
data.forEach(function (a) {
keys.reduce(function (r, k) {
if (!r[a[k]]) {
r[a[k]] = { _: [] };
r._.push({ [k]: a[k], [k + 'list']: r[a[k]]._ });
}
return r[a[k]];
}, temp)._.push({ Id: a.Id });
});
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }