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

JavaScript用for循环生成新数组时所有项都是最后一个值如何解决

问题修复方案

问题根源

你的代码核心问题是对象引用复用:在处理有汇率数据的else分支中,你在j循环外只创建了一次arrInObj对象,后续每次循环都直接修改这个对象的属性。由于JS中对象是引用类型,push到数组里的只是对象的内存地址,并不是独立副本,所以最终数组里的所有对应元素都会指向同一个对象,自然就全是最后一次循环的赋值结果。
你遇到的circular object Object错误也和引用复用、控制台打印引用类型的快照机制有关。

修复代码

只要把else分支里的对象创建逻辑移到j循环内部,每次循环都生成独立的新对象即可:

var res = [{
    id: 3,
    name: "Türk Lirası",
    code: "TRY",
    offerCurrencyTypeExchanges: [],
    label: "Türk Lirası (TRY)"
  },
  {
    id: 4,
    name: "USD",
    code: "USD",
    offerCurrencyTypeExchanges: [{
        exchangeRateId: 33642,
        localize: "Alış",
        value: 9.2857,
        valueSection: 1
      },
      {
        exchangeRateId: 33642,
        localize: "Satış",
        value: 9.3024,
        valueSection: 2
      },
      {
        exchangeRateId: 33642,
        localize: "Efektif alış",
        value: 9.2792,
        valueSection: 3
      },
      {
        exchangeRateId: 33642,
        localize: "Efektif satış",
        value: 9.3164,
        valueSection: 4
      }
    ]
  },
  {
    id: 5,
    name: "EUR",
    code: "EUR",
    offerCurrencyTypeExchanges: [{
        exchangeRateId: 33643,
        localize: "Alış",
        value: 10.8108,
        valueSection: 1
      },
      {
        exchangeRateId: 33643,
        localize: "Satış",
        value: 10.8303,
        valueSection: 2
      },
      {
        exchangeRateId: 33643,
        localize: "Efektif alış",
        value: 10.8033,
        valueSection: 3
      },
      {
        exchangeRateId: 33643,
        localize: "Efektif satış",
        value: 10.8465,
        valueSection: 4
      }
    ]
  },
  {
    id: 6,
    name: "TRY",
    code: "TRY",
    offerCurrencyTypeExchanges: [],
    label: "TRY (TRY)"
  }
]
var resultAutoComplete = [];
for (var i = 0; i < res.length; i++) {
  if (res[i].offerCurrencyTypeExchanges.length == 0) {
    var arrInObj = {
      code: res[i].code,
      id: res[i].id,
      name: res[i].name,
      label: res[i].name + " (" + res[i].code + ")"
    }
    resultAutoComplete.push(arrInObj)
  } else {
    // 每次j循环都创建新的独立对象
    for (var j = 0; j < res[i].offerCurrencyTypeExchanges.length; j++) {
      var exchange = res[i].offerCurrencyTypeExchanges[j];
      var arrInObj = {
        code: res[i].code,
        id: res[i].id,
        name: res[i].name,
        label: res[i].code + " - " + exchange.localize + "(" + exchange.value + ")",
        exchangeRateId: exchange.exchangeRateId,
        localize: exchange.localize,
        value: exchange.value,
        valueSection: exchange.valueSection
      }
      resultAutoComplete.push(arrInObj)
    }
  }
}
console.log(resultAutoComplete)

内容的提问来源于stack exchange,提问作者Süleyman TAŞÇI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:08