簡體   English   中英

array.splice在javascript中無法正常工作

[英]array.splice not working correctly in javascript

我正在編寫一個簡單的數獨求解器,它使用數字1-9組成的數組,如果該單元格不可能將它們設置為null。 一個示例是一個答案只能為5的單元格,因此除5外,所有數字均設置為null。 然后,我有一個clean()函數,該函數從數組中刪除所有為null的值,但不能正常工作。 原始數組是這個。

[null,null,null,null,5,null,null,null,null]

清洗后返回

[null,null,5,null,null]

javascript代碼在這里,並且網格是數獨中的數字網格

function mainmethod(){

        var onepos=oneposs();

    }
    function oneposs(){

        var possibs=new Array(1,2,3,4,5,6,7,8,9);
        for (var ycount=0;ycount<=8;ycount++){
            var value=grid[0][ycount];
            var index=possibs.indexOf(value);
            possibs[index]=null;

        }
    //      for(var xcount=0;xcount<=8;xcount++){
    //      var value=grid[xcount][0];
    //      var index=possibs.indexOf(value);
    //      possibs.splice(index,1);
    //  }

        possibs=clean(possibs);
        alert(JSON.stringify(possibs));
    }
    function clean(array){
        for(var i=0;i<=8;i++){
            if(array[i]===null){
                array.splice(i,1);
            }
        }
        return array;
    }

從本質上講,array.splice不會拼接所需的所有內容,我也不知道為什么

您在迭代時更改數組。 嘗試這樣的事情:

function clean(array){
    for(var i=0;i<=8;i++){
        if(array[i]===null){
            array.splice(i--,1);
        }
    }
    return array;
}

--降低索引,因為下一個項目將與您要刪除的項目處於相同的索引。

而且,作為參數傳遞的對象和數組都是通過引用傳遞的,因此您無需返回任何內容。 您可以clean(possibs);

那是因為當您“拼接”數組時,索引會改變。 也許您可以嘗試以下代碼:

function clean(array){
    var x = [];
    for(var i=0;i<array.length;i++){
        if(array[i]!=null){
            x.push(array[i]);
        }
    }
    return x;
}

嘗試這個:

var array = [null,null,null,null,5,null,null,null,null];
for(var i=0;i<=array.length; ){
    if(array[i] === null){
        array.splice(i,1);
    } else if (array.length < 2) {
        break;
    } else {
        i++;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM