You are filling the array with the same object reference of the array in
var result1 = new Array(long).fill([]);
// ^^ same array for all elements
Any assignment later takes place in the same array.
In the working version,
var result2 = [[], [], [], []];
// ^^ ^^ ^^ ^^ four different arrays
you takes four different arrays, which have no reference to the same array.
The reference for Array.fill
states the static behavior, and while Javascript, objects are handed over by reference.
The fill()
method fills all the elements of an array from a start index to an end index with a static value.
var myMatrix = [
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]
];
function rotateMatrixClockwise(matrix) {
var array = [];
var long = matrix.length;
var result1 = new Array(long).fill(array);
var result2 = [[], [], [], []];
console.log("Empty result1:");
console.log(result1);
console.log("Empty result2:");
console.log(result2);
for (var row = 0; row < long; row++) {
for (var col = 0; col < long; col++) {
result1[row][col] = matrix[long - col - 1][row];
result2[row][col] = matrix[long - col - 1][row];
}
}
console.log("Result1:");
console.log(result1);
console.log("Result2:");
console.log(result2);
console.log('array', array);
}
rotateMatrixClockwise(myMatrix)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…