2017-10-12 118 views
4

在點擊事件中將重複值添加到數組時遇到了我的項目問題。試圖防止將重複值添加到數組中。

當我將點擊項目的值推送到數組openedCards.push(card);時,代碼允許將多個項目值添加到數組中,從而使用單個項目創建匹配值。

我試過包裝這樣的代碼,所以if ($.inArray(card, openedCards) < 0)openedCards.push(card);我看到匹配類不再被添加到匹配對或任何值的事情。

這裏是Here is the jsfiddle

回答

5

香草的JavaScript可以做到這一點像下面這樣:

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

哪裏array是你的,你不想要的重複value的陣列。


或者,您可以使用以下ES6語法:

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

嗯是啊,它的工作原理與防止重複之內,但由於某種原因,檢查可用性這現在阻止了以下代碼添加.match類,即使兩張卡片實際匹配時也是如此。不知道爲什麼。 – logikevcoder

0

你可以只用$.inArray(),如:

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

我想你碰到的問題與使用對象引用vs值

雖然obj和obj2具有相同的基礎屬性值,但它們都返回d ifferent值$ .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