Сравните свойства со строкой поиска в многомерном наблюдаемом массиве в knockout.js
У меня есть наблюдаемый массив в Knockout.js, в котором я храню список людей. Структура этого массива выглядит примерно так:
Array
|--- Person 1
|--- ID
|--- Name
|--- ...
|--- Person 2
|--- ID
|--- Name
|--- ...
|--- ...
У меня есть панель поиска, которая должна сравнивать ее значение с любым из полей человека. Так что, если бы я набрал "000", а это ID 1, это должен быть хит. То же самое, если бы я набрал "Персона", если это имя Персона 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!
}