尝试防止将重复值添加到数组中。

时间:2017-10-12 03:19:00

标签: javascript jquery

在点击事件中向数组添加重复值时,我的项目出现问题。

当我将点击的项目的值推送到数组openedCards.push(card);时,代码允许将多个项目值添加到数组中,从而为单个项目创建匹配的值。

我试过像这样包装这段代码if ($.inArray(card, openedCards) < 0)openedCards.push(card);我看到匹配类不再被添加到匹配对或任何值。

这是Here is the jsfiddle

3 个答案:

答案 0 :(得分:15)

使用vanilla javascript,您可以执行以下操作:

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

array是您不希望重复的value数组。

或者,您可以使用以下es6语法:

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

答案 1 :(得分:2)

我认为您遇到使用对象引用与值

的问题

虽然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

答案 2 :(得分:1)

您可以使用$.inArray(),例如:

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