如何将数组中含共同值的对象按该值分组为键值对结构?
实现数组按指定属性分组的方法
当然有方法实现这个需求,下面是几种常用的JavaScript实现方式:
方法一:使用数组reduce方法(推荐)
reduce是处理数组聚合场景的高效工具,代码简洁且符合函数式编程风格:
var data = [ {a: 1, b: 2}, {a: 2, b: 4}, {a: 1, b: 6}, {a: 2, b: 9} ]; const treat = data.reduce((acc, curr) => { const key = curr.a; // 若当前键不存在,初始化空数组 if (!acc[key]) { acc[key] = []; } // 将当前对象推入对应数组 acc[key].push(curr); return acc; }, {}); console.log(treat);
方法二:ES6+简化版reduce写法
利用逻辑或赋值运算符??=简化数组初始化逻辑:
const treat = data.reduce((acc, curr) => { const key = curr.a; acc[key] ??= []; acc[key].push(curr); return acc; }, {});
方法三:普通for...of循环
如果更习惯命令式编程风格,用普通循环也能实现:
var data = [ {a: 1, b: 2}, {a: 2, b: 4}, {a: 1, b: 6}, {a: 2, b: 9} ]; const treat = {}; for (const item of data) { const key = item.a; if (!treat[key]) { treat[key] = []; } treat[key].push(item); } console.log(treat);
以上三种方法最终都会生成你需要的结构:
const treat = { 1: [{a:1,b:2}, {a:1,b:6}], 2: [{a:2,b:4}, {a:2,b:9}] }
内容的提问来源于stack exchange,提问作者MOHD MEHRAN
相关产品推荐
相关产品推荐

