Попытка предотвратить добавление повторяющихся значений в массив.
Возникла проблема с моим проектом, когда дело доходит до добавления дублирующегося значения в массив при событии щелчка.
когда я 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);
}