arrays - 在 Lodash 中循环和合并对象
问题描述
我有一个对象数组,如下所示:
var obj = [{
employeeId: 1300000,
requestValue: 2
}, {
employeeId: 1300000,
requestValue: 3
}, {
employeeId: 1300001,
requestValue: 4
}]
我知道如何在javascript中做到这一点。但是,如何使用 Lodash 检索以下结果:
var result = {
1300000: [
{ requestValue: 2 },
{ requestValue: 3 }
],
1300001: [
{ requestValue: 4 }
]
}
解决方案
使用 Lodash:
这是示例:
let input = [{"employeeId":1300000,"requestValue":2},{"employeeId":1300000,"requestValue":3},{"employeeId":1300001,"requestValue":4}],
res = _(input)
.groupBy('employeeId')
.mapValues(g => _.map(g, ({requestValue}) => ({requestValue})))
.value();
console.log(res)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
使用纯 JavaScript
- 取一个散列(resultant)并开始使用reduce迭代它
- 检查员工 id 是否作为每个哈希的键
employeeId
存在,如果存在则使用它,否则使用空数组创建键值对 - 获取现有值(用于密钥)或新值并推送
requestValue
let input = [{"employeeId":1300000,"requestValue":2},{"employeeId":1300000,"requestValue":3},{"employeeId":1300001,"requestValue":4}],
res = input.reduce((r, {employeeId, requestValue})=> {
(r[employeeId] = r[employeeId] || []).push({requestValue});
return r;
}, {});
console.log(res);
推荐阅读
- java - 获取位置仅获取 UI 线程上的位置(GPS 位置)
- r - R个未定义列的子集
- java - 为什么 HashMap 中 get() 的时间复杂度为 O(1)
- python - 如何计算创建帖子的分钟数?
- android - 识别 Android UI 元素的 id 和定义它们的 xml 文件的好方法是什么?
- javascript - react-select 无法在搜索字段中粘贴值
- javascript - 我可以等待 DOM 事件解决吗?
- swift - Cocoapods 在最新的 Xcode 11.2.1 版本上导致错误
- javascript - 将函数作为道具传递给 Typescript React 功能组件
- algorithm - 交换数在排序算法分析中的重要性 - 三路分区