在Lodash中循环并合并对象

时间:2019-03-19 09:52:14

标签: 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 }
    ]
}

1 个答案:

答案 0 :(得分:1)

使用Lodash:

  1. Group ByemployeeId
  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. 获取哈希(结果),然后使用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);