如何使用Lodash按timeFrom的hour和minute字段对对象数组排序?
问题
我拥有一个包含如下数据的对象数组:
items = [ { ....someFields timeFrom: { hour: 17, minute: 15 } }, { ....someFields timeFrom: { hour: 12, minute: 32 } }, { ....someFields timeFrom: { hour: 17, minute: 15 } }, { ....someFields timeFrom: { hour: 17, minute: 35 } } ]; _.sortBy(items, o => o.timeFrom.hour);
目前我仅通过上述代码按timeFrom的hour字段排序,请问如何使用Lodash同时按timeFrom的hour和minute字段进行排序?
解决方案
Lodash的_.sortBy方法支持传入排序依据的数组,数组中的元素按优先级从高到低排列,就能实现多字段排序。针对你的场景,只需要将hour和minute的路径(或对应的取值函数)依次放入数组即可:
方式一:使用字段路径字符串
const sortedItems = _.sortBy(items, ['timeFrom.hour', 'timeFrom.minute']);
方式二:使用取值函数数组
const sortedItems = _.sortBy(items, [ item => item.timeFrom.hour, item => item.timeFrom.minute ]);
两种方式效果一致:先按hour升序排序,当两个元素的hour相同时,再按minute升序排序,最终得到符合预期的排序结果。
内容的提问来源于stack exchange,提问作者Arams
相关产品推荐
相关产品推荐

