javascript - 使用 lodash 按可选属性对 javascript 数组进行排序

标签 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',
        '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 函数结合使用。对于每个元素,解构 date2date,如果 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/

相关文章:

javascript - 如何暂停网页上运行的所有内容?

javascript - 带有 Blob URL 的 404 的 XMLHttpRequest 状态

javascript - 无法格式化 keystone.js 中的嵌套日期字段

javascript - 扩展 Backbone 对象

javascript - npm 不安装下划线包

javascript - 在 angularjs 应用程序中更改粗体文本

javascript - 仅允许在 Android 应用程序上访问文件并使用 .htaccess 或 javascript 禁用浏览器访问..?

javascript - 按字符串属性值对对象数组进行排序

javascript - JS : Array defined or undefined

javascript - 唯一的对象数组并使用 lodash 或下划线合并重复项