使用Underscore实现按多属性嵌套分组并生成JSON
用Underscore实现按指定属性分组并合并对应属性值
嘿,这个需求用Underscore来实现其实非常直观,我来给你一步步说明怎么操作:
核心思路
我们可以分两步走:
- 先用
_.groupBy把数组里的对象按x和y的组合分组,确保相同x、y的对象被归到同一组; - 再用
_.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
相关产品推荐
相关产品推荐

