使用lodash按可选属性排序javascript数组
我有一个javascript数组。像这样的:使用lodash按可选属性排序javascript数组,javascript,arrays,underscore.js,lodash,Javascript,Arrays,Underscore.js,Lodash,我有一个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',
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
函数而不更改原始数组来完成此操作?使用带有iteratees函数的.orderBy()
。对于每个元素,分解结构date2
,并date
,如果date2
不存在,则返回date
:
const myObjects=[{“名称”:“名称1”,“日期”:“2017-04-15T22:00:00Z”,“日期2”:“2017-04-12T22:00:00Z”},{“名称”:“名称2”,“日期”:“2017-04-05T22:00:00Z”},{“名称”:“名称3”,“日期”:“2017-04-05T22:00:00Z”},{“名称”:“名称4”,“日期”:“2017-04-12T22:00:00Z”,“日期2”:“2017-06-10T22:00:00Z”};
const orderedObjects=u.orderBy(myObjects,({date2,date})=>date2 | | date,true);
console.log(orderedObjects)代码>
您可以与回调函数一起使用,该函数检查日期2
值,如果该值在日期
值时存在
以下是您的通话方式:
_.orderBy(myObjects, function(o) {
return o.date2 ? o.date2 : o.date;
}, true);
演示:
让MyObject=[{
“名称”:“名称1”,
“日期”:“2017-04-15T22:00:00Z”,
“日期2”:“2017-04-12T22:00:00Z”
},
{
“名称”:“名称2”,
“日期”:“2017-04-05T22:00:00Z”
},
{
“名称”:“名称3”,
“日期”:“2017-04-05T22:00:00Z”
},
{
“名称”:“名称4”,
“日期”:“2017-04-12T22:00:00Z”,
“日期2”:“2017-04-10T22:00:00Z”
}
];
let ordered=u.orderBy(myObjects,function(o)){
返回o.date2?o.date2:o.date;
},对);
控制台日志(已订购)代码>