Knockout имеет служебные функции, которые не задокументированы, но они существуют в библиотеке, чтобы помочь с фильтрацией массивов.
Вот полный список всех служебных методов для работы с массивами:
ko.utils.arrayFilter
ko.utils.arrayFirst
ko.utils.arrayForEach
ko.utils.arrayIndexOf
ko.utils.arrayMap
ko.utils.arrayPushAll
ko.utils.arrayRemoveItem
ko.utils.compareArrays
ko.utils.unwrapObservable
а Райан Нимейер написал хороший пост в блоге о том, как использовать некоторые их.
Способ 1
Вот краткий пример для начала:
var newList = ko.utils.arrayFilter(list(), function(item) {
return item.price > 10;
});
Это создает newList
предметов, цена которых превышает 10. Затем вы можете изменить свой текущий список, передав ему новый список:
list(newList);
Способ 2
Другой вариант — найти элементы, которые вы хотите удалить. Скажем, вы хотите удалить все предметы с ценой выше 10:
var rList = ko.utils.arrayFilter(list(), function(item) {
return item.price > 10;
});
Далее вы можете позвонить:
list.removeAll(rList);
Способ 3
И, как говорится, метафорически содрать шкуру с кошки можно несколькими способами:
list.remove(function(item) { return item.price > 10 });
Вот тебе..
и я уверен, что есть много других способов сделать это. Если вам нужны более продвинутые способы фильтрации массивов, я бы порекомендовал посмотреть underscore.js.
person
Evan Larsen
schedule
26.03.2013