Сравните свойства со строкой поиска в многомерном наблюдаемом массиве в 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!
}
Другие вопросы по тегам