2013-08-19 3 views
0

У меня есть функция, где я удаляю некоторые части массива, используя .splice, но когда я смотрю около console.log на его длину, он не изменился .. и с hexdump я также видел, что «удаленная» строка все еще существуетArray.splice не меняет длину

eg

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 

(значение, которое должно быть удалено происходит из другого вара, поэтому я написал часть с «IndexOf»)

Судоку является 3D Matrix: первого D анса второго D является x и y строк/столбцов, в то время как третье измерение для остальных возможностей

Что делать, чтобы удалить значение раз и навсегда?

, потому что у меня есть, если это необходимо знать длину моих Массивы ...

после того, как я бросил кучу дополнительной 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, но не решается мои проблемы в моем реальном коде ... иногда я видел «неопределенный» в моем коде .. но большая проблема в том, что он также оставил там шестнадцатеричные представления бинарного. .. так что длина, даже после того, как я прямо сказал ему, чтобы получить меньше, не изменилась ...

+0

работ [здесь ] (http://jsfiddle.net/Badye/). Что такое «Hexdump»? Хм ... Вы изменили свой массив с 1D на 2D ... – Teemu

+0

На самом деле это сейчас 3D, и я думаю, что в 'Array.indexOf (3) есть опечатка' ... – user1983983

+0

Я изменил его, как будто он в мой код ... – Robin93K

ответ

0

Вы сращивание элемента, который находится за пределы массива:

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

Судоку [j] [y] .indexOf (Судоку [x] [y] [k]) = 0, так что это Sudoku [j] [y]. сращивание (0, 1), что определенно внутри – Robin93K

+0

@ Robin93K Вы уверены? Вы консолировали его? Единственный способ, которым я могу получить сращивание, чтобы ничего не делать, - это когда я использую число, равное или превышающее длину массива. – HMR

+0

да, я console.log'ed это ... – Robin93K