如何用更少代码按年龄分组对象数组?可使用Lodash
用Lodash快速按年龄分组人员数组
需求说明
我有如下人员对象数组:
[ { name: "person1", age: 23 }, { name: "person2", age: 23 }, { name: "person3", age: 24 }, { name: "person4", age: 24 }, { name: "person5", age: 25 } ]
需要按年龄将其分组为如下嵌套数组:
[ [ { name: "person1", age: 23 }, { name: "person2", age: 23 } ], [ { name: "person3", age: 24 }, { name: "person4", age: 24 } ], [ { name: "person5", age: 25 } ] ]
希望用最少代码实现,允许使用Lodash工具库。
实现方案
用Lodash的_.groupBy和_.values组合,两行代码就能完成:
const people = [/* 上述原始人员数组 */]; const groupedByAge = _.values(_.groupBy(people, 'age'));
逻辑解释
_.groupBy(people, 'age'):按age字段对数组分组,返回一个以年龄为键、对应人员数组为值的对象,结构类似{ 23: [...], 24: [...], 25: [...] }_.values(...):提取这个分组对象的所有值,直接转换成你需要的嵌套数组格式。
原生JS简化实现(可选)
如果不想依赖Lodash,也可以用原生JS的reduce结合Object.values实现,代码同样简洁:
const groupedByAge = Object.values( people.reduce((acc, person) => { (acc[person.age] || (acc[person.age] = [])).push(person); return acc; }, {}) );
内容的提问来源于stack exchange,提问作者ahmed nadjib
相关产品推荐
相关产品推荐

