![](/img/trans.png)
[英]How to sort an array of objects based on the numerical value of an object property?
[英]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.