ecmascript-6 - 使用 filter 和 groupby 映射 json 数组的值
问题描述
我的 json 如下所示。我正在尝试根据目标 id 等于 1083 的角色 id 对我的对象进行分组。
我的json:
[ {
"id" :1,
"role": {
"id": "25",
},
"target": {
"id": "1083",
}
},
{
"id" :2,
"role": {
"id": "25",
},
"target": {
"id": "1083",
}
},
{
"id" :3,
"role": {
"id": "25",
},
"target": {
"id": "1084",
}
},
{
"id" :4,
"role": {
"id": "3",
},
"target": {
"id": "1083",
}
}
]
预期结果:
{
"25" : [
{
"id": 1
"role": {
"id": "25",
},
"target": {
"id": "1083",
}
},
{ "id": 2
"role": {
"id": "25",
},
"target": {
"id": "1083",
}
}
],
"3": [
{
"id" :4,
"role": {
"id": "3",
},
"target": {
"id": "1083",
}
}]
}
所以对于我的结果 json,它按 25 和 3 分组。第三条记录在我的预期结果中不存在,因为它的目标 id 是 1084
我尝试过滤以仅获取目标 id 1083,但是当我尝试使用 grouby 时,出现错误
data.filter(o => {
return o.target.id === "1083"
})
解决方案
var data = [{ "id": 1, "role": { "id": "25", }, "target": { "id": "1083", } }, { "id": 2, "role": { "id": "25", }, "target": { "id": "1083", } }, { "id": 3, "role": { "id": "25", }, "target": { "id": "1084", } }, { "id": 4, "role": { "id": "3", }, "target": { "id": "1083", } } ]
const groupIt = (targetId) => _.chain(data)
.filter(x => x.target.id ===targetId)
.groupBy('role.id')
.value()
console.log(groupIt('1083'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
你可以在没有 lodash 的情况下通过filter
then达到同样的效果reduce
:
var data = [{ "id": 1, "role": { "id": "25", }, "target": { "id": "1083", } }, { "id": 2, "role": { "id": "25", }, "target": { "id": "1083", } }, { "id": 3, "role": { "id": "25", }, "target": { "id": "1084", } }, { "id": 4, "role": { "id": "3", }, "target": { "id": "1083", } } ]
const groupIt = (targetId) => data.filter(x => x.target.id === targetId)
.reduce((r, c) => (r[c.role.id] = [...r[c.role.id] || [], c], r), {})
console.log(groupIt('1083'))
推荐阅读
- symfony - 具有“算法:自动”的用户密码字段的最大长度?
- python-3.x - 如何解决autopytoexe中的错误以将python程序编译为exe?
- mule - RAML 字符串数组中项目的最大长度
- c++ - CMake 链接器标志
- c# - 使用泛型转换器使用派生源类列表中的对象更新目标派生类列表中的对象
- react-native - 如何在 React Native 中从 NFC 卡读取数据?
- angular - 类型“字符串”不可分配给类型“数字”
- amazon-web-services - 是否可以在 WebHost 启动后添加到 IConfiguration?
- r - 为什么重复循环会改变循环优化的结果?
- javascript - 滚动时动态打开和关闭 div