具有两个属性的 JavaScript 排序

标签 javascript underscore.js

我正在努力对两个级别进行排序。逻辑如下。如果任何对象具有状态,则返回具有状态的最新对象。如果没有对象有状态,则返回最近没有状态的对象。

var apps = [
  { status: 'PASS', 
    date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
  },
  { status: 'FAIL',
    date_created: Thu Sep 02 2015 17:24:45 GMT-0700 (PDT),
  },
  { status: '',
    date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT),
  }
]

var desired_result = [{ status: 'PASS', 
    date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
  }]

var apps_2 = [
  { status: '', 
    date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
  },
  { status: '',
    date_created: Thu Sep 02 2015 17:24:45 GMT-0700 (PDT),
  },
  { status: '',
    date_created: Thu Sep 01 2015 17:24:45 GMT-0700 (PDT),
  }
]

var desired_resul2 = [{ status: '', 
    date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
  }]

我已经尝试过

var sorted = _.sort_by(apps, function (x) { x.date_updated });

我还看了其他一些SO questions但在第一次排序后无法将物体保持在原位。

最佳答案

如果我正确理解您的问题,这就是您要查找的内容。 http://jsfiddle.net/whxu5sea/3/

您需要过滤元素以确保它们具有任何类型的状态。然后按日期排序,最早的在前。然后获取第一个值。在我的示例中,我假设日期为字符串,但仍然应该有效。

var apps = [
  { status: 'PASS', 
    date_created: 'Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)'
  },
  { status: 'FAIL',
    date_created: 'Thu Sep 02 2015 17:24:45 GMT-0700 (PDT)',
  },
  { status: '',
    date_created: 'Thu Sep 01 2015 17:24:45 GMT-0700 (PDT)',
  }
];

var x;
var arr = _.filter(apps, function(data) {
    return !!data.status.length;
});

x = _.chain( arr.length ? arr : apps )
    .sortBy(function(data) {
        return new Date(data.date_created).getTime();
    }).last().value();

console.log( x );

在未提供状态的情况下检查其是否有效:http://jsfiddle.net/whxu5sea/4/

我希望这有帮助。如果需要任何进一步说明,请 LMK。

编辑:更新以获取最新元素(最后一个)。

关于具有两个属性的 JavaScript 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32387456/

相关文章:

javascript - Loop Velocity.js 自定义效果序列

javascript - 按数组过滤数组 Underscore JS

javascript - 使用下划线填充数组中缺失的对象

javascript - jquery Click事件不会触发

javascript - 如何使用 HTML5、JS 或 Angular 验证 Ionic 中的电子邮件?

javascript - 如何向 prestashop 添加自定义代码

javascript - 您对具有代码完成功能的简单 JavaScript 编辑器有何建议?

javascript - 使用下划线操作javascript对象

javascript - 在 JavaScript 中将方法用作(curried)函数

javascript - 具有重置功能的 Angular Directive(指令)