收藏
回答

setdata修改完的值在循环内外值就不一致?

var _this=this;

var n = _this.data.markers.length;

for (var i = 0; i < app.globalData.szArray.length; i++) {

_this.setData({

'markersObj.id': n + i,

'markersObj.longitude': app.globalData.szArray[i].longitude,

'markersObj.latitude': app.globalData.szArray[i].latitude,

'markersObj.iconPath': "../../images/8.png",

'markersObj.callout.content': "失物招领",

'markersObj.callout.color': "#FF3333",

})

app.globalData.markerArray.push(_this.data.markersObj);

console.log("里" + app.globalData.markerArray[i].latitude)

}

console.log("外" + app.globalData.markerArray[0].latitude + " " + app.globalData.markerArray[1].latitude)

打印出来的值循环内markerArray数组的第一个元素和第二个元素值不一样,但循环外markerArray数组的第一个元素和第二个元素值就一样了,为什么呢?那个好心人帮我解决一下这个问题,非常感谢!!!


回答关注问题邀请回答
收藏

1 个回答

  • undefined
    undefined
    02-04

    var i 改成 let i 试试

    02-04
    赞同
    回复 6
    • 😄
      😄
      02-05
      还是循环外面的值一致
      02-05
      回复
    • undefined
      undefined
      02-05回复😄
      写个示例代码片段吧,开发者工具新建代码片段
      02-05
      回复
    • 😄
      😄
      02-05
      index.js:
      const app = getApp()
      Page({
      data: {
      markersObj: {
      id: null,
      longitude: null,
      latitude: null,
      },
      markers:[]
      },
      createMarker: function () {
      var _this = this;
      var n = _this.data.markers.length;
      if (app.globalData.markerArray.length != app.globalData.szArray.length) {
      for (let i = 0; i < app.globalData.szArray.length; i++) {
      _this.setData({
      'markersObj.id': n + i,
      'markersObj.longitude': app.globalData.szArray[i].longitude,
      'markersObj.latitude': app.globalData.szArray[i].latitude,
      })
      app.globalData.markerArray.push(_this.data.markersObj);
      console.log("里" + app.globalData.markerArray[i].latitude)
      }
      console.log("外" + app.globalData.markerArray[0].latitude + " " + app.globalData.markerArray[1].latitude)
      var a = _this.data.markers.concat(app.globalData.markerArray);
      _this.setData({ markers: a })
      }
      },
      onShow(){
      var that=this;
      setTimeout(function () {
      that.createMarker();
      }, 1000)
      }
      })
      app.js:
      globalData: {
      markerArray: [],
      szArray: [
      {
      id:0,
      longitude:104,
      latitude:34
      },
      {
      id:1,
      longitude: 105,
      latitude: 35
      }
      ],
      }
      循环内的值不一样,循环外就一样了,这是什么原理
      02-05
      回复
    • undefined
      undefined
      02-05回复😄
      这个代码片段,能直接运行的
      02-05
      回复
    • 😄
      😄
      02-05
      那我的代码运行的结果没问题?
      02-05
      回复
    查看更多(1)
登录 后发表内容
问题标签