javascript - 在将对象推送到数组时,对象中一个特定变量的所有值都变得相同
问题描述
我创建将同一个对象推送到一个数组 10 次,但每次推送它都会用 +1 更改对象内部的一个变量。但是当循环结束时,所有对象中的所有变量都以 10 结束(相同的值)。为什么是这样?
例子:
var obj = {}
var array = [];
for(var i = 0; i < 10; i++){
obj.number = i;
array.push(obj);
}
当我然后 console.log(array)
它返回数组,但所有 obj 的编号相同。为什么是这样?
解决方案
您在数组中推送一个对象,这意味着您正在推送对同一对象的引用;如果你在某处改变你的对象,它会在任何地方改变。
您可以:
在每次迭代时创建一个新对象:
var array = [];
for(var i = 0; i < 10; i++){
var obj = {}
obj.number = i;
array.push(obj);
}
console.log(array);
或者,克隆对象以确保更改不会应用于引用
var obj = {}
var array = [];
for(var i = 0; i < 10; i++){
let newObject = JSON.parse(JSON.stringify(obj))
newObject.number = i;
array.push(newObject);
}
console.log(array);
推荐阅读
- github - 为什么我从 github 获取只读文件系统,并且在尝试安装 apache 气流时出错?
- javascript - 如何单击一个元素,将鼠标移到其他元素上,然后选择您使用 JavaScript 悬停的那些元素?
- validation - 如何将应用验证转换为返回 MonadThrow?
- python - 如何在 Matplotlib 中使用坐标?
- flutter - 如何从同时悬停的多个小部件中获取信息?
- python - 查询集外键模型
- php - 如何使嵌入 iframe 的 YouTube 播放器正常工作而不阻止 Chrome 中的页面加载?
- c# - 为什么在包含 foreach 循环之后我得到了?
- react-native - 使用新坐标更新 react-native-map
- linux - dpkg“处理触发器时发现循环”libc-bin