javascript - javascript中的多级分组
问题描述
[
{
"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
orloadesh
或其他方式获得以上输出?
解决方案
您可以通过将对象用作包含该级别的所有项目的哈希表来采用嵌套方法,由该级别的_
属性表示。
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; }
推荐阅读
- c++ - 为什么我得到这个 C++ 代码的错误输出?(hackerrank的问题之一)
- node.js - how do i fix issue regarding "npm -v" not working? I upgrade to angular 10 and everytime I use terminal this below error
- javascript - Cannot return after sending response
- python - 使用 docker-compose build 时出错:__init__() 得到了一个意外的关键字参数“interpolate”
- javascript - JavaScript in Vue Component, set Data property in object 1 tp data in object 2 if Key matches
- scikit-learn - 将管道与 GridSearchCV 一起使用
- swift - dismiss keyboard from all view hierarchy programmatically in swift
- office-js - Enable/Disable custom ribbon commands not working in OfficeJS Excel
- python - SonarQube does not correctly import coverage.xml file for Python project
- asp.net-core - 使用 Github 操作进行部署