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

Vue新手求助:for循环最后一次迭代覆盖最终输出问题

解决Vue循环中数组被最后一次迭代覆盖的问题

嘿,我懂你现在碰到的麻烦!你在循环里写的new1=item1是直接把new1变量重新赋值成当前的item1,每一次循环都会把之前存的内容彻底覆盖掉,所以最后new1自然就只剩下最后一次迭代的item1了。

问题根源

直接赋值new1=item1会让new1每次都指向新的对象/数组,而不是把当前的item1添加到已有的new1集合里,这就是为什么最后只保留了最后一项。

解决方案

我们需要把每个迭代出来的item1添加到new1数组中,而不是直接覆盖。根据item1的类型(单个对象还是数组),可以用下面两种方式:

情况1:item1是单个对象

如果JSON.parse(response.data[i].pur_items)解析出来的是单个对象,直接用push方法把它加入数组:

methods:{
  getTotals(){
    var self = this;
    var new1 = []; // 初始化空数组
    this.$http.get('http://localhost:3000/api/purchases')
      .then(function (response) {
        console.log("response.data value")
        console.log(response.data)
        for (var i = 0; i < response.data.length; i++) {
          var item1 = JSON.parse(response.data[i].pur_items);
          console.log("item1 for index i time" +i)
          console.log(item1)
          // 使用push添加,而不是直接赋值
          new1.push(item1);
        }
        console.log("最终的new1数组:", new1);
      })
  }
}

情况2:item1是一个数组

如果pur_items本身存的是数组格式的JSON,解析后item1是一个数组,想要把这个数组里的所有元素合并到new1中,可以用扩展运算符配合push,或者concat方法:

// 方式1:扩展运算符push
new1.push(...item1);

// 方式2:concat(会返回新数组,需要重新赋值)
new1 = new1.concat(item1);

更简洁的写法(ES6+)

如果你项目支持ES6语法,用forEach循环会更清爽:

response.data.forEach(purchase => {
  const item1 = JSON.parse(purchase.pur_items);
  new1.push(item1);
});

这样修改后,new1数组就会收集到所有迭代产生的item1内容,不会再被最后一次迭代覆盖啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:30:18