gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:48:03 27 4
gpt4 key购买 nike

我有例如像这样的数组:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com