javascript - AngularJS/javascript javascript 对象的特殊排序顺序

标签 javascript angularjs arrays

我有例如像这样的数组:

var myArray = [];

var item1 = {
    start: '08:00',
    end: '09:30'
}
var item2 = {
    start: '10:00',
    end: '11:30'
}
var item3 = {
    start: '12:00',
    end: '14:30'
}
var item4 = {
    start: '16:00',
    end: '18:25'
}
var item5 = {
    start: '19:00',
    end: '21:25'
}

myArray.push(item1);
myArray.push(item2);
myArray.push(item3);
myArray.push(item4);

排序后的顺序应如下所示

[item1, item2, item5, item4, item3]

因此,开始时间在 12:00 之前的项目应按升序排列,而开始时间在 12:00 之后或等于 12:00 的项目应按相反顺序排列。

我使用 AngularJS 来迭代项目:

<div ng-repeat="item in $scope.myArray" | orderBy:myOrderFunction? ...

我需要上面的 ng-repeat 订单。 是否有可能(以高性能的方式)做到这一点?

最佳答案

说实话,这很奇怪。但是,这应该可以做到:

function wiggleTime(time) {
  var t = 60 * parseInt(time.substr(0, 2), 10) + parseInt(time.substr(3), 10);
  return (t >= 720) ? 2160 - t : t;
}

function wiggleComparator(a, b) {
  var aa = wiggleTime(a.start);
  var bb = wiggleTime(b.start);
  return aa - bb;
};
console.log(myArray.sort(wiggleComparator).map(function(o) { return o.start; }));
// ["08:00", "10:00", "19:00", "16:00", "12:00"]

为了提高性能,您可以预先摆动时间并将其存储到结构中,这样每个元素只需摆动一次,而不是每个测试对摆动两次。

关于javascript - AngularJS/javascript javascript 对象的特殊排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40254072/

相关文章:

javascript - Mootools 每 5 秒暂停一个 Array.each 循环

javascript - jQuery 为 WebKit(chrome)和 Firefox 中的相同对象返回不同的高度

javascript - HTML5=HTML+CSS+Javascript吗

angularjs - 仅两列上的 Angular ng-grid 过滤器

css - 使用 ui-router 的全屏背景图片

python - 按索引访问数组

java - 如何使用 Lambda 将字符串数组转换为整数数组?

带有填充数组的 C 简单代码

javascript - 如何使用 jQuery 定期更新页面上的日期/时间值?

javascript - ng-src : show a throbber before an image is loaded