[英]JavaScript Arrays .push() not working as Expected
我正在编写此 JavaScript 代码,期望 output 为
[["o","o","x","o","o"],["o","x","x","x","o"]]
但相反它给出了
<script>
function createArray(x) {
var array=[];
var finalArray=[];
for(var i=1;i<=x;i++){
array[i-1]='O';
}
var midIndex=Math.round(x/2)-1;
array[midIndex]='X';
finalArray.push(array);
var num1=midIndex-1;
var num2=midIndex+1;
array[num1]="X";
array[num2]="X";
finalArray.push(array);
console.log(finalArray) ;
}
createArray(5);
</script>
请有人说明原因。
在 Javascript 中,对象(在您的情况下为数组)通过引用传递。 您将array
推送到finalArray
,然后更新数组。 但是您已经从相同的参考中更新了数据。 因此,您可以使用扩展运算符,它可以有效地创建一个新数组(带有新引用),您可以将此数组推送到finalArray
finalArray.push([...array]);
那是因为Javascript对象是通过引用传递的。 您应该创建数组的副本并推送到最后一个
function createArray(x) { var arr=[]; var finalArray=[]; for(var i=1;i<=x;i++){ arr[i-1]='O'; } var midIndex=Math.round(x/2)-1; arr[midIndex]='X'; finalArray.push(arr.slice()); var num1=midIndex-1; var num2=midIndex+1; arr[num1]="X"; arr[num2]="X"; finalArray.push(arr.slice()); console.log(finalArray); } createArray(5);
它适用于 JS 指针,当您将数组推入 final 时,您将数组的指针推入 final 的索引,并且当更改数组时,final 也发生了变化。
为了解决它,你可以使用简单的代码:
finalArray.push([...array]);
祝你好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.