![](/img/trans.png)
[英]Javascript Array.splice stopped working correctly in my Angular project
[英]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.