Как предотвратить печать двух идентичных элементов в таблице? - PullRequest
0 голосов
/ 07 июня 2018

Я пишу код JavaScript, где пользователь должен иметь возможность поиска по элементам измерения, который отображается во всплывающем окне с таблицей.

Код, отображающий элементыв массиве выглядит так:

$element.find("#myInput").on("qv-activate", function (){
    let elemList = [];

    self.backendApi.getData(requestList).then(function (dataPages) {
        let elem = dataPages[0].qMatrix;

        for(let i = 0; i < elem.length; i++){
            elemList.push(elem[i][0].qText);
        }


        $(document).ready(function () {
            $("#myInput").on("keyup", function () {
                var value = $(this).val().toLowerCase();

                for (var i=0; i<elemList.length; i++) {
                    if (elemList[i].toLowerCase().indexOf(value) >= 0){

                        $element.find('#searchTable').prepend('<tr><td id="searchElem">' + elemList[i] + '</td></tr>');
                    }
                }
            });
        });
    })
})

Единственная проблема в том, что когда я использую панель поиска, она представляет элемент несколько раз.Есть ли способ, которым я могу убедиться, что .prepend () только ожидает, если это не то же самое значение, что и раньше?Наподобие;если значение элемента совпадает с предварительно добавленным значением, то не стоит добавлять?

Надеюсь, это имеет смысл, и у вас есть решение моей проблемы.Спасибо!

1 Ответ

0 голосов
/ 07 июня 2018

Вместо вызова prepend во втором цикле for создайте новый массив и добавьте к нему elemList[i].

Затем используйте решение из "Получить все уникальные значения в массиве (удалить дубликаты) ", чтобы удалить дубликаты из массива.Например, если values - это ваш новый массив:

function onlyUnique(value, index, self) { 
    return self.indexOf(value) === index;
}
values = values.filter(onlyUnique);

Наконец, переберите ваш новый массив и вызовите prepend для каждого.

...