【问题标题】:Problem with keyBy in lodash. Lodash removed some propertieslodash 中 keyBy 的问题。 Lodash 删除了一些属性
【发布时间】:2021-07-13 17:08:06
【问题描述】:

例如,我有一个数组

let arr = [{a:1, b:2, c:3}, {a:1, b:2}, {a:2, c:3}, {a:2, c:3} ];

我使用了 keyBy 函数

const f = _.keyBy(arr, e => e.a);

结果是

1: {a: 1, b: 2}
2: {a: 2, c: 3}

但我需要所有属性,我期望的结果是

1: {a: 1, b: 2, c:3}
2: {a: 2, c: 3}

我必须做什么?

【问题讨论】:

  • _.keyBy 获取最后一个元素和键。你想要哪个元素?你想要拥有最多属性的元素吗?或者你想用同一个键合并所有元素?

标签: javascript angular typescript lodash


【解决方案1】:

通过a对项目进行分组,并使用_.mapValues()对组进行迭代,并将每个组合并为一个对象:

const arr = [{a:1, b:2, c:3}, {a:1, b:2}, {a:2, c:3}, {a:2, c:3} ];

const result = _.mapValues(
  _.groupBy(arr, 'a'),
  group => _.merge({}, ...group)
)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

使用 lodash/fp,您可以使用相同的想法创建一个更简洁的函数:

const { flow, groupBy, mapValues, mergeAll } = _

const fn = flow(
  groupBy('a'),
  mapValues(mergeAll),
)

const arr = [{a:1, b:2, c:3}, {a:1, b:2}, {a:2, c:3}, {a:2, c:3} ];

const result = fn(arr)

console.log(result)
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2016-02-20
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多