如何连接对象数组并返回单个数组?

问题描述 投票:0回答:1

我从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];
        })
    })
javascript arrays object geoserver
1个回答
0
投票

有一个伟大的npm包,这种类型的任务,我曾经使用过的称为 深度融合你可以用它将一个或多个数组或对象合并成一个,并控制可枚举的属性。


0
投票

如果你只在访问时才需要懒加载值,你可以把累加器函数变成一个生成器(为了性能)。 还有其他的事情你可以做,比如使用承诺和生成器来产生值。 虽然如果你没有看到任何性能问题,那就没有必要了。

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) );
© www.soinside.com 2019 - 2024. All rights reserved.