Я перебираю список элементов в таблице и имею поле поиска. Элемент, который я ищу, имеет много очень похожих значений (номеров билетов): по большей части indexOf
работает, но в некоторых случаях возвращает несколько результатов.
Если вы ищете по указанному c номер билета, он должен возвращать только <tr>
со значением искомого билета. Далее query
- это значение поиска. Если оно равно -1, пропустите это. Затем выполняется проверка, которая continue
s переходит к отфильтрованным результатам и которая будет отображена.
for (var i in data){
var ticket = data[i].ticket.indexOf(query) === -1;
if (ticket)
continue;
else {
filtered_data.push(data[i]);
}
}
Пример: Я ищу ABC002465179
, он вернет следующее:
ABC002465179
ABC002480483
, ABC002480487
, ABC002480494
и ABC002480265
Я также играл с методом match
, но вижу те же результаты.
Любое понимание того, что я здесь пропускаю?
Создал jsfiddle для каждого комментатор: https://jsfiddle.net/7zrknwga/3/
Пытаюсь воспроизвести там, и я выставляю 1 результат, как и должно быть.
ОБНОВЛЕНИЕ: удалось выяснить это. Как @KaeyangTheG предположил, что с фильтрованными данными происходит что-то еще. Был еще один столбец в фильтре (parent_ticket), который мог иметь значение null
: была проверка против этого, но когда я переместил логи c, чтобы проверить элемент indexOf плюс аспект null
вместе (используя &&
), он смог отфильтровать правильные результаты.
Таким образом, проблема заключалась не в проверке indexOf в отношении ticket
, а скорее в parent_ticket
из-за возможных нулевых значений. ticket
никогда не бывает null