【问题标题】:How to sort an Observable Array based on a certain item inside each Array如何根据每个数组中的某个项目对 Observable 数组进行排序
【发布时间】:2019-10-14 04:54:45
【问题描述】:

我在淘汰赛中有一个 Observable 数组,里面有数组,每个数组里面都有一个称为“时间”的项目。我将如何根据项目的值对我的可观察数组中的数组进行排序,以便它们按从低到高的顺序排列。值的格式为 Hour:Minute:Second。

function viewModel() {
  var self = this;
  
  self.myObservable = ko.observableArray([
  {time: "01:00:00", name: 'frank'},
  {time: "05:30:00", name: 'bob'},
  {time: "03:00:00", name: 'bill'},
  {time: "00:00:21", name: 'john'},
  {time: "00:12:00", name: 'paul'}
  ])
}

【问题讨论】:

    标签: javascript arrays sorting knockout.js


    【解决方案1】:

    Knockout 为 observableArray 提供了 built-in methods,其工作方式类似于 Array.prototype。你可以使用localeComparesort

    function viewModel() {
      var self = this;
    
      self.myObservable = ko.observableArray([
          { time: "01:00:00", name: 'frank' },
          { time: "05:30:00", name: 'bob' },
          { time: "03:00:00", name: 'bill' },
          { time: "00:00:21", name: 'john' },
          { time: "00:12:00", name: 'paul' }
        ]);
    
      self.sort = function() {
        self.myObservable.sort((a, b) => a.time.localeCompare(b.time))
      }
    }
    
    ko.applyBindings(new viewModel)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
    
    <!-- ko foreach: myObservable -->
      <span data-bind="text: time"></span><br>
    <!-- /ko -->
    
    <button data-bind="click: sort">Sort</button>

    【讨论】:

    • 是的,但是我想我没有清楚地给出我的问题的例子,我的问题是我需要使用 HH:MM:SS 格式的值对可观察数组进行排序。你知道我会怎么做吗?我用一个新的例子改变了我的问题。谢谢
    【解决方案2】:

    您应该使用sort() 函数。

        self.myObservable.sort(function (left, right) {
            return left.age === right.age ? 0
                 : left.age < right.age ? -1
                 : 1;
        });
    

    【讨论】:

    • 是的,但是我想我没有清楚地给出我的问题的例子,我的问题是我需要使用 HH:MM:SS 格式的值对可观察数组进行排序。你知道我会怎么做吗?我用一个新的例子改变了我的问题。谢谢
    • 声明时间:01:00:00 在 JavaScript 中无效,也许您的意思是时间:'01:00:00'?无论如何,在比较函数中,您可以将两个值(左和右)转换为秒,然后进行比较。
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2013-10-22
    • 2021-10-03
    • 2015-06-08
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多