我有这个代码。我什至放入 console.logs 来调试它。但我真的不明白为什么他们的行为方式不同。为什么 result1 数组用最后一个数组值填充所有内部数组?
var myMatrix = [
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]
];
function rotateMatrixClockwise(matrix) {
var long = matrix.length;
var result1 = new Array(long).fill([]);
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);
}
rotateMatrixClockwise(myMatrix);
您正在使用数组中的相同对象引用填充数组
var result1 = new Array(long).fill([]);
// ^^ same array for all elements
稍后的任何分配都发生在同一个数组中。
在工作版本中,
var result2 = [[], [], [], []];
// ^^ ^^ ^^ ^^ four different arrays
您采用四个不同的数组,它们没有对同一数组的引用。
参考为Array.fill声明静态行为,而 Javascript 则通过引用传递对象。
The fill()
方法用静态值填充数组中从起始索引到结束索引的所有元素。
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)