【发布时间】:2018-04-05 23:50:23
【问题描述】:
当我移动 tempArr 时,async.eachSeries 实际上会跳过坐标(或者看起来像坐标Arr 也被移动了)。我认为这与指向具有相同内存位置的对象的指针有关,但我不知道它是如何工作的。当我为变量赋值时实际发生了什么?
如果我这样做,代码将起作用
tempArr = _.toArray(coordinates);
而不是
tempArr = coordinatesArr;
示例如下:
var coordinatesArr, tempArr;
var marginLon = [];
var marginLat = [];
var coordinates = {
'0': { lon: 13.18472, lat: 32.88972 },
'1': { lon: 13.400454, lat: 32.767144 },
'2': { lon: -120.59234, lat: 47.372269 },
'3': { lon: 122.065977, lat: -26.471618 },
'4': { lon: 122, lat: -25 }
}
coordinatesArr = _.toArray(coordinates);
tempArr = coordinatesArr;
// Will work if changed to below
// tempArr = _.toArray(coordinates);
async.eachSeries(coordinatesArr, function(set, acb) {
tempArr.shift();
if(tempArr.length < 1) return acb();
async.eachSeries(tempArr, function(set2, aacb) {
marginLon.push(Math.abs(set.lon - set2.lon));
marginLat.push(Math.abs(set.lat - set2.lat));
aacb();
}, function(err) {
if(err) return acb();
acb();
});
}, function(err) {
if(err) return;
return;
});
谢谢
【问题讨论】:
-
什么是
_.toArray()?拨打.shift()的目的是什么? -
_.toArray() 来自将对象转换为数组的 lodash 库。我想要做的是一个异步嵌套的 for 循环。移位的目的是让我不比较相同的坐标(即坐标[0] 和坐标[0]。
标签: javascript arrays pointers memory async.js