Как отсортировать наблюдаемый массив на основе определенного элемента внутри каждого массива - PullRequest
1 голос
/ 28 мая 2019

У меня есть массив наблюдаемых в нокауте с массивами внутри, внутри каждого из массивов есть элемент, называемый «время». Как бы я упорядочил массивы внутри моего наблюдаемого массива так, чтобы они были в порядке, от низкого до высокого, в зависимости от значения элемента. Значения указаны в часах: минутах: втором формате.

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'}
  ])
}

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Knockout имеет встроенные методы для observableArray, которые работают аналогично Array.prototype. Вы можете sort, используя localeCompare

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>
1 голос
/ 28 мая 2019

Вы должны использовать функцию sort () .

    self.myObservable.sort(function (left, right) {
        return left.age === right.age ? 0
             : left.age < right.age ? -1
             : 1;
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...