Javascript 为什么这两个空数组的填充方式不同?
我有这个密码。我甚至放了console.logs来调试它。但我真的不明白为什么他们的行为方式不同。为什么result1数组用最后一个数组值填充所有内部数组Javascript 为什么这两个空数组的填充方式不同?,javascript,arrays,Javascript,Arrays,我有这个密码。我甚至放了console.logs来调试它。但我真的不明白为什么他们的行为方式不同。为什么result1数组用最后一个数组值填充所有内部数组 var myMatrix=[ [0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15] ]; 函数旋转矩阵(矩阵){ var long=矩阵长度; var result1=新数组(长).fill([]); var result2=[]、[]、[]、[]、[]; log(“空结果
var myMatrix=[
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]
];
函数旋转矩阵(矩阵){
var long=矩阵长度;
var result1=新数组(长).fill([]);
var result2=[]、[]、[]、[]、[];
log(“空结果1:”);
console.log(result1);
log(“空结果2:”);
console.log(result2);
对于(变量行=0;行<长;行++){
for(var col=0;col 旋转矩阵(myMatrix)代码>您正在使用中数组的相同对象引用填充数组
var result1 = new Array(long).fill([]);
// ^^ same array for all elements
以后的任何赋值都发生在同一数组中
在工作版本中
var result2 = [[], [], [], []];
// ^^ ^^ ^^ ^^ four different arrays
您使用四个不同的数组,它们没有对同一数组的引用
引用表示静态行为,而Javascript则通过引用传递对象
fill()
方法使用静态值填充从开始索引到结束索引的所有数组元素
var myMatrix=[
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]
];
函数旋转矩阵(矩阵){
var数组=[];
var long=矩阵长度;
var result1=新数组(长)。填充(数组);
var result2=[]、[]、[]、[]、[];
log(“空结果1:”);
console.log(result1);
log(“空结果2:”);
console.log(result2);
对于(变量行=0;行<长;行++){
for(var col=0;col RotateMaryXClockWise(myMatrix)
让我直截了当地说:它通过引用将新数组传递给数组四次。fill()?那太糟糕了。我刚刚尝试将[]
更改为新数组
,它也做了同样的事情。除了for循环之外,还有什么方法可以让它每次都创建新数组吗?您可以映射空数组,但仍然需要一些迭代。@Tyrannogina new array(100).fill(0).map(array)@Tyrannogina似乎更适合写数组(100).fill(0).map(=>[])。。。下划线表示函数中未使用的变量,该变量比()=>
短一点。