#javascript #knockout.js #multidimensional-array #ko.observablearray
#javascript #knockout.js #многомерный массив #ko.observablearray
Вопрос:
У меня есть наблюдаемый массив в Knockout.js , в котором я храню список пользователей. Структура этого массива выглядит примерно так:
Array
|--- Person 1
|--- ID
|--- Name
|--- ...
|--- Person 2
|--- ID
|--- Name
|--- ...
|--- ...
У меня есть строка поиска, которая должна сравнивать свое значение с любым из полей person. Итак, если бы я ввел «000» и это был идентификатор пользователя 1, это должно быть попадание. То же самое, если бы я ввел «Person», если это имя пользователя 2.
В настоящее время мой код выглядит примерно так:
self.searchValue = ko.observable();
self.throttledValue = ko.computed(self.searchValue).extend({ throttle: 500 });
//Search by value
self.throttledValue.subscribe(function (val) {
if (val !== ''){
for (var i = 0; i < self.persons().length; i ) {
var name = self.persons()[i].fullName;
var id = self.persons()[i].ID;
//Further search logic here
}
}
}, self);
Я хотел бы иметь возможность сравнивать поля, имеющиеся у пользователя, со строкой поиска, вот так:
//This code should replace the "further search logic"
if(name.toLowerCase().contains(val.toLowerCase()){
//It's a hit!
}
Но, по-видимому, ни toLowerCase()
ни contains()
не распознается, что приводит к ошибке при попытке загрузить мою страницу.
Кто-нибудь может мне помочь в правильном направлении?
Заранее спасибо!
Ответ №1:
toLowerCase()
это string
метод, он не будет работать, например, с числом.
Попробуйте с toString()
if(name.toString().toLowerCase().contains(val.toString().toLowerCase()){
//It's a hit!
}