You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript向数组推入对象数据异常问题求助

问题原因及解决方案

问题根源

你在循环外部仅创建了一个mapOption对象,每次循环只是修改该对象的属性值,然后将同一个对象的引用推入数组。由于数组中所有元素指向的都是内存中的同一个对象,当你最后一次修改mapOption.center为2时,数组里的所有元素都会同步显示这个最新值,导致第一个元素的center值被覆盖。

解决方法

方法1:在循环内部创建新对象

每次循环都生成一个全新的对象,确保数组中的每个元素都是独立的引用:

let mapOptions = []
let averagelist = [1, 2]

for (let i = 0; i < averagelist.length; i++) {
    let mapOption = {} // 每次循环创建新对象
    mapOption.center = averagelist[i]
    mapOption.level = 3
    mapOptions.push(mapOption)
    console.log(mapOptions)
}

方法2:使用对象展开语法生成副本

通过展开语法{...mapOption}创建原对象的浅拷贝,将副本推入数组,避免引用同一个对象:

let mapOptions = []
let mapOption = {}
let averagelist = [1, 2]

for (let i = 0; i < averagelist.length; i++) {
    mapOption.center = averagelist[i]
    mapOption.level = 3
    mapOptions.push({...mapOption}) // 推入对象副本
    console.log(mapOptions)
}

两种方法都能让你得到期望的结果:[{"center":1,"level":3},{"center":2,"level":3}]

内容的提问来源于stack exchange,提问作者menw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:55:21