首页 > 解决方案 > 在 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 }
    ]
}

标签: arrayslodash

解决方案


使用 Lodash:

  1. 分组依据employeeId
  2. mapValues映射每个组,并且仅requestValue通过使用 map

这是示例:

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

  1. 取一个散列(resultant)并开始使用reduce迭代它
  2. 检查员工 id 是否作为每个哈希的键 employeeId存在,如果存在则使用它,否则使用空数组创建键值对
  3. 获取现有值(用于密钥)或新值并推送 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);


推荐阅读