繁体   English   中英

JavaScript Arrays.push() 未按预期工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM