求助一个关于JS循环遍历,然后给数组动态push对象的问题?

这个问题我已经解决啦,但是仍然还是有问题,为什么要以下边(图一)这种写法,对象才能被正确的push进数组?
image.png

在此之前,我是这么push的

image.png

图二得到的对象中itemObj.selectNumberitemObj.selectContent都是最后一个,而不是对应每一个。
大佬们不用找for循环的问题,因为我分别在多处打印过itemObj.selectNumberitemObj.selectContent的取值是否正确,答案是正确的。
后来我在打印过程时发现了一个问题,如下图所示:

image.png

然后我就知道一个事,就是我要遍历一次,推送一个数组,而不是所声明的变量,这样才能确确实实的把对应的数据push进数组。
最后就回归到我想问的问题本身,那么,为什么要以图一的写法,而不是图二的写法,有人知道其原理吗?我真的非常想知道。

阅读 1.8k
2 个回答

图一push的是克隆的新对象,所以push进数组的每一项都是单独的对象
图二push的是同一个对象,每次更新itemObj,之前的也会更新,所以全覆盖了

具体可以了解下js数据类型的概念,itemObj 是对象属于引用类型,循环中push的每一个itemObj都是同一个地址,结果是最后一次循环覆盖的值。解构赋值属于一次浅拷贝.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏