gpt4 book ai didi

arrays - 如何确保 knockout 可观察数组保持排序?

转载 作者:行者123 更新时间:2023-12-02 06:18:51 24 4
gpt4 key购买 nike

我有一个对象数组存储在 observableArray 中,每个数组项都是 moment.js 日期的对象。

{startDate:momentObject, endDate:momentObject, cycle:null}

我需要计算两件事。一个是 startDates 之间的平均时间。我认为最简单的方法是计算数组中最早和最晚开始日期之间的持续时间,并将其除以条目总数。

我还需要 2 个开始日期之间的时间段。我想到的一个快速解决方案是这样的:

$.each(dateArray, function(index, item){
var previousItem = dateArray[index - 1];

if(previousItem){

// since these are moment objects, just use the diff method
return item.cycle = previousItem.startDate.diff(item.startDate, 'days');
}

return false;
});

但是这将要求 observableArray 按升序排序。所以这是我的问题。

  1. 如何确保每次向 observableArray 推送新项目时强制对其进行排序?
  2. 有没有更好的方法来计算 startDates 和中间周期之间的周期?
  3. 或许,我可以在向数组而不是循环中添加一个项目的同时计算周期?

最佳答案

您可以向 obervableArray 添加一个订阅事件处理程序,如下所示:

self.MyArray = ko.observable([]);
var myArraySubscription = self.MyArray.subscribe(onMyArrayChange);

function onMyArrayChange(){
//Remove the subscription before sorting, to prevent an infinite loop
myArraySubscription.dispose();
myArraySubscription = null;

//Force a sort of the array here.
self.MyArray.sort();//NOTE: You need to define your sorting logic here...this line is just a placeholder

//Re-subscribe
myArraySubscription = self.MyArray.subscribe(onMyArrayChange);
}

关于arrays - 如何确保 knockout 可观察数组保持排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17153309/

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