You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lodash对JS对象数组按双键分组的需求调整问题

解决方案

原代码的问题在于_.groupBy('b', 'c')并未同时按b和c分组——Lodash的groupBy仅接受一个分组参数,实际逻辑是仅按b字段分组,导致所有b='sample'的项被归为一组,不管c的值,这才出现了test4被错误合并的情况。

要实现仅当b='sample'且c='ten'时合并a值,其余情况按b和c的组合独立分组的需求,可以通过自定义分组键实现:

var _ = require('lodash')

const objects = [
  { a: 'test1', b: 'sample', c: 'ten' },
  { a: 'test2', b: 'sample', c: 'ten' },
  { a: 'test3', b: 'sampleone', c: 'ten' },
  { a: 'test4', b: 'sample', c: 'tentwo' },
]

const grouped = _(objects)
  // 自定义分组规则:符合条件的项用统一键,其余用b+c的唯一组合键
  .groupBy(item => {
    return item.b === 'sample' && item.c === 'ten' 
      ? 'sample-ten' 
      : `${item.b}-${item.c}`
  })
  .map((items) => ({
    b: items[0].b,
    c: items[0].c,
    a: items.map(item => item.a).join('|')
  }))
  .value()

console.log(grouped)

逻辑说明

  1. 分组阶段:通过groupBy的自定义函数,给需要合并的项(b='sample'且c='ten')分配同一个分组键sample-ten;其他项则用b和c拼接的字符串作为唯一键,确保不同b+c组合的项各自成组。
  2. 转换阶段:遍历每个分组,提取b、c(取分组内第一个项的值即可,同一分组的b和c符合规则),并将分组内所有项的a值用|拼接。

执行后输出结果完全符合预期:

[
  { b: 'sample', c: 'ten', a: 'test1|test2' },
  { b: 'sampleone', c: 'ten', a: 'test3' },
  { b: 'sample', c: 'tentwo', a: 'test4' }
]

内容的提问来源于stack exchange,提问作者Daryl Wong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:05:19