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

使用Underscore实现按多属性嵌套分组并生成JSON

用Underscore实现按指定属性分组并合并对应属性值

嘿,这个需求用Underscore来实现其实非常直观,我来给你一步步说明怎么操作:

核心思路

我们可以分两步走:

  1. 先用_.groupBy把数组里的对象按x和y的组合分组,确保相同x、y的对象被归到同一组;
  2. 再用_.map遍历每个分组,把分组里的a属性值提取出来合并成数组,同时保留x和y属性,重组为目标格式的对象。

完整代码实现

// 你的输入数组
const input = [
  {"x":6811,"y":15551,"a":"a"},
  {"x":6811,"y":15551,"a":"b"},
  {"x":6811,"y":15551,"a":"c"},
  {"x":6811,"y":15552,"a":"c"},
  {"x":6812,"y":15551,"a":"c"}
];

// 处理逻辑
const result = _.chain(input)
  // 按x和y的组合分组,用拼接字符串作为唯一键
  .groupBy(item => `${item.x}-${item.y}`)
  // 遍历每个分组,转换为目标格式
  .map(group => ({
    x: group[0].x,
    y: group[0].y,
    a: _.pluck(group, 'a')
  }))
  .value();

console.log(result);

代码解释

  • _.chain():链式调用Underscore方法,让代码更简洁流畅;
  • _.groupBy(...):这里用${item.x}-${item.y}作为分组的标识,保证只要x和y完全相同的对象会被分到同一组;
  • _.map(...):对每个分组进行转换,因为同组内的x、y都是一致的,所以直接取分组里第一个对象的x和y即可;
  • _.pluck(group, 'a'):快速提取分组内所有对象的a属性值,自动组成一个数组,完美符合你的需求。

运行这段代码后,就能得到你期望的结果啦:

[
  {"x":6811,"y":15551,"a":["a","b","c"]},
  {"x":6811,"y":15552,"a":["c"]},
  {"x":6812,"y":15551,"a":["c"]}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:57:37