Array.splice不会改变长度

时间:2013-08-19 11:59:44

标签: javascript arrays splice hexdump

我有一个函数,我使用.splice删除数组的某些部分,但当我查看console.log的长度时它没有改变..并且使用hexdump我也看到了“删除”字符串仍然存在

e.g。

Sudoku[j][y] = [3, 7]
Sudoku[x][y][k] = 3

function...
Sudoku[j][y].splice(Sudoku[j][y].indexOf(Sudoku[x][y][k]), 1)

console.log(Sudoku[j][y], Sudoku[j][y].length, Hexdump.dump(Sudoku[j][y]))
= [7] 2 /*Zusammenfassung des hex:*/ 3, 7

(应删除的值来自另一个var,这就是我用“indexOf”编写部分的原因)

数独是一个3D矩阵:第一个D和第二个D是x和y行/列,而第三个维度是其余的可能性

我该怎么做才能一劳永逸地删除这个值?

因为我有一个需要知道数组长度的IF ...

在我向我的代码中添加了一堆更多的console.log后,我也看到了那些东西...... 有时...

console.log(sudoku[j][y].length, sudoku[j][y], sudoku[j][y].indexOf(sudoku[x][y][k]))
sudoku[j][y].splice(sudoku[j][y].indexOf(sudoku[x][y][k]), 1);
console.log(sudoku[j][y].length, sudoku[j][y])

结果:

4 [7, 9] 0
3 [7, 9]

所以我最新的尝试是使用新方法而不是拼接:

sudoku[x][j][(sudoku[x][j].indexOf(sudoku[x][y][k]))]=sudoku[x][j][sudoku[x][j][sudoku[x][y].length-1]]
sudoku[x][j].length--

它在jsfiddle工作但是在我的真实代码中没有解决我的问题... 有时我在我的代码中看到了一个“未定义”...但更大的问题是它还将hexdump留在那里......所以即使在我直接说他变小之后,长度也没有改变... < / p>

1 个答案:

答案 0 :(得分:0)

你正在拼接一个在数组之外的元素:

var arr = [1,2,3];
arr.splice(3,1);//doesn't take anything out of the array
arr.length===3;//true