在点击事件中向数组添加重复值时,我的项目出现问题。
当我将点击的项目的值推送到数组openedCards.push(card);
时,代码允许将多个项目值添加到数组中,从而为单个项目创建匹配的值。
我试过像这样包装这段代码if ($.inArray(card, openedCards) < 0)openedCards.push(card);
我看到匹配类不再被添加到匹配对或任何值。
答案 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);