【问题标题】:Array.splice doesn't change the lengthArray.splice 不改变长度
【发布时间】:2013-08-19 11:59:43
【问题描述】:

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

例如

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 中工作,但在我的真实代码中没有解决我的问题...... 有时我在我的代码中看到“未定义”.. 但更大的问题是它也将 hexdumps 留在了那里......所以即使我直接说他变小,长度也没有改变......

【问题讨论】:

  • 工作hereHexdump 是什么?嗯...您已将阵列从 1D 更改为 2D...
  • 其实现在是3D了,我觉得Array.indexOf(3)有错别字...
  • 我改变了它,就像它在我的代码中一样......
  • link 写代码时不工作..
  • hexdump 是将一个值显示为 hexcode,编码和解码它说 Sudoku[j][y] 仍然是 3,7

标签: javascript arrays splice hexdump


【解决方案1】:

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

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

【讨论】:

  • Sudoku[j][y].indexOf(Sudoku[x][y][k]) = 0,所以是 Sudoku[j][y].splice(0, 1),什么肯定在里面
  • @Robin93K 你确定吗?你 console.log 了吗?我可以让拼接不做任何事情的唯一方法是使用等于或大于数组长度的数字。
猜你喜欢
  • 2021-05-02
  • 2020-03-02
  • 1970-01-01
  • 2015-05-21
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
相关资源
最近更新 更多