如何把for循环输出的值赋给对象

如何把for循环输出的值赋给对象





var mylist =[{'id':1,'zb':'116.434446,39.90816','dis':''},{'id':2,'zb':'117.493314,40.412994','dis':''},{'id':3,'zb':'117.185697,39.109413','dis':''}]
 for(var i=0;i<mylist.length;i++){
      var item=mylist[i];
      var result = mygetDis(myloc,item.zb);//mygetDis()为计算距离函数,使用接口获取当前位置,并根据mylist坐标计算两坐标之间距离值
        result.then(res=>{
          console.log(res)//控制台输出790.60Km,649.80Km,830.59Km3个值
          //如何把输出的值赋给mylist里面的dis

        })
    }
  //使赋值以后输出的mylist的dis是对应有值的
  console.log(mylist)


for(var i=0;i<mylist.length;i++){
  let item=mylist[i];
  mygetDis(myloc,item.zb).then(res=>{
      console.log(res)
      item.dis = res;
    })
}

img


result.then(res => {
  item.dis = res
});
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7466696
  • 这篇博客你也可以参考下:改造 for 循环输出连续数字
  • 除此之外, 这篇博客: 关于for循环语句输出到数组中的 关于for循环语句输出到数组 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    在这种情况下,可以使用闭包解决这个问题。闭包可以在异步函数中保存外部变量的值,并在异步函数执行完毕后访问这些值。以下是解决方案的代码:

    var mylist = [{'id':1,'zb':'116.434446,39.90816','dis':''},{'id':2,'zb':'117.493314,40.412994','dis':''},{'id':3,'zb':'117.185697,39.109413','dis':''}]
    for(var i=0;i<mylist.length;i++){
        var item=mylist[i];
        (function(item) { // 使用闭包保存item的值
            var result = mygetDis(myloc,item.zb);
            result.then(res=>{
                item.dis = res; // 在异步函数中给item的dis属性赋值
                console.log(res);
            })
        })(item); // 传递item给闭包
    }
    console.log(mylist)
    

    在这个解决方案中,我们使用一个立即执行函数表达式(IIFE),即(function(item){...})(item),来创建闭包。这样做可以保存每个迭代的item的值,并在异步函数中使用。在result.then()回调函数中,我们给item.dis属性赋值。最后,我们打印mylist数组以查看结果。

    请注意,由于异步函数的性质,我们无法保证console.log(mylist)的输出顺序与异步函数的执行顺序一致。但是,mylist中的dis属性将会被正确地赋值。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^