Javascript indexOf String метод, возвращающий несколько результатов - PullRequest
0 голосов
/ 23 марта 2020

Я перебираю список элементов в таблице и имею поле поиска. Элемент, который я ищу, имеет много очень похожих значений (номеров билетов): по большей части 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

1 Ответ

0 голосов
/ 23 марта 2020

Если вы просто хотите знать, что заявка, к которой вы обращаетесь, существует в массиве данных, вы можете просто выполнить итерацию массива и сравнить поле заявки со строкой query.

// isFound is for tracking the ticket if it exist or not and indexOfTicket is for tracking its index.
let isFound = false;
let indexOfTicket = -1;

data.map((item, index)=>{
    if(item.ticket == query){
        isFound = true;
        indexOfTicket = index;
    }
})
if(isFound){
    console.log("Ticket "+data[indexOfTicket]+" is at "+(indexOfTicket)+' position');
}else {
    console.log("Not Found");
}
...