javascript - array.splice 在 javascript 中无法正常工作

标签 javascript arrays splice

我正在编写一个简单的数独解算器,它采用数字 1-9 的数组,如果该单元格不可能将它们设置为 null。例如,单元格的答案只能是 5,因此除 5 之外的所有数字都设置为空。然后,我有一个 clean() 函数,它删除数组中所有为空的值,但它无法正常工作。原来的数组是这样的。

[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);

关于javascript - array.splice 在 javascript 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455905/

相关文章:

javascript - 生成状态图拖放

c - C 中的指针/数组问题

javascript - 去芜存菁 - CodeWars 挑战

javascript - 从本地存储中删除项目

javascript - Mendeley API - 如何使用 JavaScript SDK - 隐式流认证

javascript - ReactJS - super 表达式必须为 null 或函数,而不是未定义

php按路径选择数组

c - 是一个==*一个??关于指针的查询

javascript - jquery - 找到整数或空格时拆分(即拆分类(class)代码)

javascript - 使用 jQuery 显示/隐藏元素