javascript的数组长度为0,但是,里面有内容。

clipboard.png

控制台下,发现javascript的数组长度为0,但是,里面有内容。里面放得是高德地图的坐标。不知道为什么会这样。

        var nArr = [];

        for(let i = 0;i<bmapMarker.length;i++) {
                var gps = bmapMarker[i];
                AMap.convertFrom(gps, 'gps', function (status, result) {
                  if (result.info === 'ok') {
                    var lnglats = result.locations; // Array.<LngLat>
                   // nArr.push(lnglats);
                   console.log(lnglats[0].lng + "," + lnglats[0].lat);
                   var str = lnglats[0].lng + "," + lnglats[0].lat;
                   nArr.push(str);
                  }
                });
        }
        console.log(nArr);

对于这个nArr,我想使用里面的值,怎么调用?

阅读 5.1k
3 个回答

控制台的输出只是一个引用,展示的数组当时是空的,展开的时候对应的值可能已经被改变了。

正常操作,坐下坐下

因为你console的是一个引用类型, 后续的操作修改了值, 控制台会给出你提示。

鼠标放到 这个字符 i 上你就知道了
clipboard.png

你for循环中

 AMap.convertFrom(gps, 'gps', function (status, result) {
                  if (result.info === 'ok') {
                    var lnglats = result.locations; // Array.<LngLat>
                   // nArr.push(lnglats);
                   console.log(lnglats[0].lng + "," + lnglats[0].lat);
                   var str = lnglats[0].lng + "," + lnglats[0].lat;
                   nArr.push(str);
                  }
                });

会开启一个新的线程. 他不会影响主线程的执行,
如果你理解 setTimeout() 或者立即执行函数,就知道了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题