Сравнение свойств со строкой поиска в многомерном наблюдаемом массиве в knockout.js

#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!
}