首页 > 解决方案 > JS:将外部定义的对象推入for循环内部的数组中,为什么总是显示最后一个而不是第一个,为什么console.log有效?

问题描述

Javascript,在for循环中将外部定义的对象推入数组时,最后一个被重复推入。

我阅读了许多 Q/A(见下面的链接)并知道解决方案,但没有找到以下 2 点的解释:

  1. 在推送之前和之后,console.log obj,它正确显示所有对象(不重复最后一个),但推送仅适用于最后一个;

  2. 如果外部定义的对象是“始终相同的对象”,为什么不重复第一个,而是重复最后一个?

相关问答:

如何在 JavaScript 中正确地将对象从 for 循环推送到数组?

React 将对象推入数组,总是推入最后一个数组

将对象压入数组后,数组中的每个对象都具有相同的值

let arr = [];
let obj = {};

for(let i=0; i<5; i++) {
  obj["single"] = i;
  obj["double"] = i*2;
  console.log(obj);
  arr.push(obj);
}

console.log(arr);

结果:

{ single: 0, double: 0 }
{ single: 1, double: 2 }   
{ single: 2, double: 4 }   
{ single: 3, double: 6 }   
{ single: 4, double: 8 }   

[
  { single: 4, double: 8 },
  { single: 4, double: 8 },
  { single: 4, double: 8 },
  { single: 4, double: 8 },
  { single: 4, double: 8 } 
]     

标签: javascriptarraysfor-loopobjectpush

解决方案


推荐阅读