在點擊事件中將重複值添加到數組時遇到了我的項目問題。試圖防止將重複值添加到數組中。
當我將點擊項目的值推送到數組openedCards.push(card);
時,代碼允許將多個項目值添加到數組中,從而使用單個項目創建匹配值。
我試過包裝這樣的代碼,所以if ($.inArray(card, openedCards) < 0)openedCards.push(card);
我看到匹配類不再被添加到匹配對或任何值的事情。
在點擊事件中將重複值添加到數組時遇到了我的項目問題。試圖防止將重複值添加到數組中。
當我將點擊項目的值推送到數組openedCards.push(card);
時,代碼允許將多個項目值添加到數組中,從而使用單個項目創建匹配值。
我試過包裝這樣的代碼,所以if ($.inArray(card, openedCards) < 0)openedCards.push(card);
我看到匹配類不再被添加到匹配對或任何值的事情。
香草的JavaScript可以做到這一點像下面這樣:
if (array.indexOf(value) === -1) array.push(value);
哪裏array
是你的,你不想要的重複value
的陣列。
或者,您可以使用以下ES6語法:
if (array.includes(value) === false) array.push(value);
你可以只用$.inArray()
,如:
if(!$.inArray(value, array))array.push(value);
我想你碰到的問題與使用對象引用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
嗯是啊,它的工作原理與防止重複之內,但由於某種原因,檢查可用性這現在阻止了以下代碼添加.match類,即使兩張卡片實際匹配時也是如此。不知道爲什麼。 – logikevcoder