我有一个 JavaScript 数组。像这样的东西:
let myObjects = [{
'name': 'name 1',
'date': '2017-04-15T22:00:00Z',
'date2': '2017-04-12T22:00:00Z' },
{ 'name': 'name 2',
'date': '2017-04-05T22:00:00Z' },
{ 'name': 'name 3',
'date': '2017-04-05T22:00:00Z' },
{ 'name': 'name 4',
'date': '2017-04-12T22:00:00Z',
'date2': '2017-04-10T22:00:00Z' }];
我想按 date2
排序 myObjects
,但如果该对象没有此属性,则应将其视为其 date
值。
我可以这样做:
myObjects.map(function(obj){ if(!obj.date2){ obj['date2'] = obj['date']; }});
let orderedObjects = _.orderBy(myObjects, 'date2', true);
但我认为这是一个棘手的解决方案。是否可以仅使用 orderBy
函数而不更改原始数组来完成此操作?
最佳答案
将 _.orderBy()
与 iteratees 函数结合使用。对于每个元素,解构 date2
和 date
,如果 date2
不存在,则返回 date
:
const myObjects = [{"name":"name 1","date":"2017-04-15T22:00:00Z","date2":"2017-04-12T22:00:00Z"},{"name":"name 2","date":"2017-04-05T22:00:00Z"},{"name":"name 3","date":"2017-04-05T22:00:00Z"},{"name":"name 4","date":"2017-04-12T22:00:00Z","date2":"2017-06-10T22:00:00Z"}];
const orderedObjects = _.orderBy(myObjects, ({ date2, date }) => date2 || date, true);
console.log(orderedObjects);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
关于javascript - 使用 lodash 按可选属性对 javascript 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46683201/