Попытка предотвратить добавление повторяющихся значений в массив.

Возникла проблема с моим проектом, когда дело доходит до добавления дублирующегося значения в массив при событии щелчка.

когда я openedCards.push(card); значение элемента, по openedCards.push(card); щелкнули мышью, в массив openedCards.push(card); код допускает добавление нескольких значений элементов в массив, создавая сопоставленное значение с одним элементом.

Я попытался обернуть этот код следующим образом, if ($.inArray(card, openedCards) < 0)openedCards.push(card); я вижу, что класс соответствия больше не добавляется в соответствующие пары или какие-либо значения в этом отношении.

вот этот вот jsfiddle

Ответ 1

С ванильным javascript вы можете сделать это следующим образом:

if (array.indexOf(value) === -1) array.push(value);

Где array - ваш массив value, в котором вы не хотите дублировать.


Или вы можете использовать следующий синтаксис es6:

if (array.includes(value) === false) array.push(value);

Ответ 2

Я думаю, что у вас возникают проблемы с использованием ссылки на объект vs value

Хотя obj и obj2 имеют одинаковое значение для базовых свойств, они оба возвращают разные значения в $.inArray

arr = [];
obj = {}; obj.A = 2;
arr.push(obj);
obj2 = {}; obj2.A = 2;
console.log($.inArray(obj, arr)); // 0
console.log($.inArray(obj2, arr)); // -1

В этом случае я бы рекомендовал использовать другое свойство карты для проверки доступности внутри массива

function containsCard(card, list) {​
   return list.some(function(elem) {
        return elem.A === card.A
   })
}

arr = [];
obj = {}; obj.A = 2;
arr.push(obj);
obj2 = {}; obj2.A = 2;
console.log(containsCard(obj, arr)); // true
console.log(containsCard(obj2, arr)); // true

Ответ 3

Вы можете просто использовать $.inArray(), например:

if(!$.inArray(value, array))array.push(value);

Ответ 4

Чтобы проверить вхождение элемента в массив, в JavaScript есть методы, из которых array.indexOf(val) является методом, который возвращает -1, когда вхождение val не найдено.

if(name_of_array.indexOf(value) == -1){
    name_of_array.push(value);   
}