Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用lodash按可选属性排序javascript数组_Javascript_Arrays_Underscore.js_Lodash - Fatal编程技术网

使用lodash按可选属性排序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',

我有一个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
函数而不更改原始数组来完成此操作?

使用带有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;
},对);
控制台日志(已订购)