我从Geoserver收到4个数组。这些数组中的每个数组都包含持有纬度数据的对象,如下图所示 地面服务器响应.我需要将这4个数组合并为一个数组。单个阵列 然后将其中的对象转换成数组。这被用来构造其他API的一些其他响应。
var routes = e.routes[0].coordinates
var coords = routes.map(function(obj){
return Object.keys(obj).sort().map(function(key){
return obj[key];
})
})
这就是 航线 这就是 协约和 预期结果 为Geoserver响应.我得到我的 地面服务器响应......在我这样做之后,结构如图所示。
function goPark(routeLayer){
var finalRoute = routeLayer._layers;
var coordsArray = Object.keys(finalRoute).map(key => {
return finalRoute[key]
});
coordsArray.forEach(function(data){
var xy = data._latlngs;
})
如果我继续下面的代码,我收到的数组结构是我想要的。见此但还是分开的。我需要以某种方式将它们合并成一个单一的数组。
var xxy = xy.map(function(obj){
return Object.keys(obj).map(function(key){
return obj[key];
})
})
有一个伟大的npm包,这种类型的任务,我曾经使用过的称为 深度融合你可以用它将一个或多个数组或对象合并成一个,并控制可枚举的属性。
如果你只在访问时才需要懒加载值,你可以把累加器函数变成一个生成器(为了性能)。 还有其他的事情你可以做,比如使用承诺和生成器来产生值。 虽然如果你没有看到任何性能问题,那就没有必要了。
function accGoPark(reset) {
return accFn(goPark, reset);
}
function accFn(fn, reset) {
const accs = accFn.accs = accFn.accs || {};
const { name } = fn;
accs[name] = !accs[name] || reset ? [] : accs[name];
accs[name] = accs[name].concat( fn() );
return accs[name];
}
你只是将一个变量xy设置为对最后一个data._latlngs的引用,在你的forEach循环中迭代,这就是为什么你只得到最后一个。 你应该直接映射coordsArray。
xxy = coordsArray.map(function(data){
var obj = data._latlngs;
return Object.keys(obj).map(function(key){
return obj[key];
})
})
使用Object.values、destructuring和箭头函数来简化语法。
xxy = routeLayer.map( ({ _layers: { _latlngs: xy }) => Object.values(xy) );