使用Underscore基于两个键对数据进行分组
按多个字段分组的解决方案
嘿,这个问题我碰到过好多次!你现在只用model作为分组键,所以所有model为sunny的对象都会被归到同一组里。要实现同时基于model和colour两个字段分组,只需要给_.groupBy的回调函数返回一个能唯一标识这两个字段组合的键就可以了,具体有两种常用方法:
方法1:字符串拼接(简单直接)
把model和colour用一个不会出现在字段值里的分隔符拼接成字符串,作为分组键:
var obj = [{ make: "nissan", model: "sunny", colour: "red" }, { make: "nissan", model: "sunny", colour: "red" }, { make: "nissan", model: "sunny", colour: "red1" }]; var result = _.groupBy(obj, p => `${p.model}-${p.colour}`);
方法2:JSON序列化(更安全)
如果担心字段值里可能包含分隔符(比如colour的值是red-blue),字符串拼接就会出问题,这时候可以用JSON.stringify把包含两个字段的对象转成字符串,作为分组键:
var result = _.groupBy(obj, p => JSON.stringify({ model: p.model, colour: p.colour }));
最终结果示例
两种方法都会得到你想要的两个分组,结果结构大概是这样:
{ "sunny-red": [ { make: "nissan", model: "sunny", colour: "red" }, { make: "nissan", model: "sunny", colour: "red" } ], "sunny-red1": [ { make: "nissan", model: "sunny", colour: "red1" } ] }
核心思路就是让分组键能唯一代表model+colour的组合,这样Lodash就能准确把相同组合的对象分到一组啦!
内容的提问来源于stack exchange,提问作者Unknown
相关产品推荐
相关产品推荐

