繁体   English   中英

根据属性值对对象进行排序

[英]Sort objects based on property value

我有对象数组,我该如何搜索所有对象并根据属性值对它们进行分类

 data = [ 
  {key: 1, val: Mon, week: 0},
  {key: 1, val: Wed, week: 0},
  {key: 1, val: Mon, week: 1},
  {key: 1, val: Mon, week: 1}
  {key: 1, val: Mon, week: 2}
]

所需的输出

week0Array = [{key: 1, val: Mon, week: 0},{key: 1, val: Wed, week: 0}]
week1Array = [{key: 1, val: Mon, week: 1}, {key: 1, val: Mon, week: 1} ]
week2Array = [{key: 1, val: Mon, week: 2}]

我试图在lodash中使用find保持不确定

_.find(collection, [predicate=_.identity], [fromIndex=0])

您可以这样使用_.groupBy(collection, [iteratee=_.identity])

 let data = [ {key: 1, val: 'Mon', week: 0}, {key: 1, val: 'Wed', week: 0}, {key: 1, val: 'Mon', week: 1}, {key: 1, val: 'Mon', week: 1}, {key: 1, val: 'Mon', week: 2} ] let weekGroups = _.groupBy(data, d => d.week) console.log(weekGroups[0]) console.log(weekGroups[1]) console.log(weekGroups[2]) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

请注意, weekGroups是一个Object而不是Array

就像POJS替代品一样,并假设数据是从头开始排序的,reduce可以创建一个数组,并根据周将对象分组为子数组。 如果需要排序,可以在调用之前进行排序以减少:

 var data = [ {key: 1, val: "Mon", week: 0}, {key: 1, val: "Wed", week: 0}, {key: 1, val: "Mon", week: 1}, {key: 1, val: "Mon", week: 1}, {key: 1, val: "Mon", week: 2} ]; var result = data.reduce((acc, obj, i) => { i && acc[acc.length-1].week == obj.week ? acc[acc.length-1].push(obj) : acc.push([obj]); return acc; }, []); console.log(result) 

括号中的条件? : ? :不是必需的,但我认为它们有助于提高可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM