array.splice在JavaScript中无法正常工作
问题描述:
我正在写一个简单的数独求解器,它需要一个数字1-9的数组,并将它们设置为null,如果它们不适用于该单元格。一个例子是答案只能是5的单元格,所以所有的数字都被设置为空,除了五。然后,我有一个clean()函数,它将从数组中删除所有值为空的值,但这不正确。原始数组是这个。array.splice在JavaScript中无法正常工作
[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++;
}
}
谢谢,它工作得很好。 – 2013-12-20 13:38:55