找到一对时从数组中删除元素

时间:2014-08-05 13:39:26

标签: javascript html if-statement for-loop

这个功能是为了翻转我的记忆游戏中的牌,它负责找到对。我试图通过在找到它们时删除它们来刷新电路板。让我们说我有6张牌,那封信" A"找到了。然后它应该删除该对" A"从董事会并随机化剩下的其他4张卡的位置。这是我函数中的if语句之一:

if(memoireValeur[0] == memoireValeur[1]){
                tempoArray.push(memoireValeur);
                carteFlip += 2;
                sum+=score;
                alert("Player 1: " +sum);

                for(var i=0;i<memoireArray.length;i++){
                    for(var j=0;j<memoireArray.length;j++){
                        if(memoireArray[i]==tempoArray[j]){
                            memoryArray=memoireArray.splice(i,1);

                        }
                    }
                }   
                document.write(memoryArray);

让我们说卡片是&#34; A&#34;,&#34; A&#34;,&#34; B&#34;,&#34; B&#34;,& #34; C&#34;&#34; C&#34 ;.这对&#34; A&#34;然后选择该部分功能将删除&#34; A&#34;从电路板/屏幕上,将另外2个字母留在电路板上。问题是document.write(memoryArray)假设显示&#34; B&#34;&#34; B&#34;&#34; C&#34;&#34; C&#34;但它不是。

2 个答案:

答案 0 :(得分:0)

我认为问题在这里。我得到的可能是问题

 memoryArray=memoireArray.splice(i,1);

splice更改您调用该函数的实际数组。它将拼接的元素作为数组返回。

所以,如果你有像贝洛一样的东西

var arr = ['A','B','A','B']
arr = arr.splice(2,1); // value of arr will be ['A'] not ['A','B','A']

如果您想要[&#39; A&#39;,&#39; B&#39;,&#39; A&#39;]使用

arr.splice(2,1) //arr will have expected output

答案 1 :(得分:0)

我认为主要问题是:

  1. 您正在将一组值推入tempoArray变量(第2行),
  2. 使用错误的数组长度循环。
  3. Splice更改原始数组,不使用返回值
  4. 固定代码:

    if (memoireValeur[0] == memoireValeur[1]) {
        tempoArray.push(memoireValeur[0]); // changed
        carteFlip += 2;
        sum += score;
        alert("Player 1: " + sum);
    
        for (var i = 0; i < memoireArray.length; i++) {
            for (var j = 0; j < tempoArray.length; j++) { //changed
                if (memoireArray[i] == tempoArray[j]) {
                   memoireArray.splice(i, 1); // changed, splice changes the original array, no need to copy the return value
    
                }
            }
        }
        document.write(memoireArray);
    }
    

    更简单的方法可能是这样的:

    if (memoireValeur[0] == memoireValeur[1]) {
        tempoArray.push(memoireValeur[0]);
        carteFlip += 2;
        sum += score;
        alert("Player 1: " + sum);
    
        memoryArray = memoireArray.filter(function(v) {
            return tempoArray.indexOf(v) == -1; // Keep any value in memoireArray that is not in tempoArray.
        });
    
        document.write(memoireArray);
    }