admin管理员组文章数量:1322850
I'm writing this JavaScript code expecting the output as
[["o","o","x","o","o"],["o","x","x","x","o"]]
but instead it gives
<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>
please some one show the reason for this.
I'm writing this JavaScript code expecting the output as
[["o","o","x","o","o"],["o","x","x","x","o"]]
but instead it gives
<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>
please some one show the reason for this.
Share Improve this question asked Jul 28, 2020 at 6:00 BenSVBenSV 1691 gold badge4 silver badges15 bronze badges 3-
1
Try
finalArray.push(array.slice());
the first time. – Unmitigated Commented Jul 28, 2020 at 6:03 -
1
.push()
doesn't clone the array you're pushing intofinalArray
. You push the "same array" (a reference to the same array) twice. – Andreas Commented Jul 28, 2020 at 6:03 - 2 Is JavaScript a pass-by-reference or pass-by-value language? – Andreas Commented Jul 28, 2020 at 6:06
3 Answers
Reset to default 3In Javascript, objects(in your case array) are passed by reference. You push the array
into finalArray
and then update the array. But you have updated the data from same reference. So you could use spread operator which would effectively create a new array(with new reference) and you can push this array to finalArray
finalArray.push([...array]);
That's because Javascript objects are passed by reference. You should create a copy of the array and push to the final one
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);
It's for JS pointer When you Push array into final u push pointer of array into an index of final and when change array the final changed too.
for resolve it u can use easy Code:
finalArray.push([...array]);
GoodLuck
本文标签: JavaScript Arrays push() not working as ExpectedStack Overflow
版权声明:本文标题:JavaScript Arrays .push() not working as Expected - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742112188a2421304.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论