我有一个像这样的平面对象:
[
{ id: 0 },
{ id: 1, group: "a" },
{ id: 2, group: "a" },
{ id: 3, group: "a/b" },
{ id: 4 },
{ id: 5, group: "a/b" },
]
目标是根据group属性将此数组转换为嵌套数组。预期结果如下:
[
{ id: 0 },
[
{ id: 1, group: "a" },
{ id: 2, group: "a" }
[
{ id: 3, group: "a/b" },
{ id: 5, group: "a/b" }
],
],
{ id: 4 },
]
有没有一种简单的方法可以实现这一目标?
答案 0 :(得分:2)
您可以使用嵌套哈希表的动态方法来嵌套项目级别。
lbrQty.Visible = false;
textQtyInput.Visible = false;

var data = [{ id: 0 }, { id: 1, group: "a" }, { id: 2, group: "a" }, { id: 3, group: "a/b" }, { id: 4 }, { id: 5, group: "a/b" }],
result = [],
hash = { _: result };
data.forEach(function (o) {
if (!o.group) {
hash._.push(o);
return;
}
o.group.split('/').reduce(function (r, k) {
if (!r[k]) {
r[k] = { _: [] };
r._.push(r[k]._);
}
return r[k];
}, hash)._.push(o);
});
console.log(result);

答案 1 :(得分:1)
恕我直言,这有点令人费解。创建一个dict更容易,密钥是group
的内容并使用它。
如果你不必特别有效,我会:
group
。这应该这样做。