![](/img/trans.png)
[英]How to disassemble an array of objects and nested arrays to Separated arrays with single data
[英]How to Concatenate Arrays of Objects and return single Array of Arrays?
我从 Geoserver 收到 4 arrays。 这些 arrays 中的每一个都包含保存 lat lng 数据的对象,如geoserver response 。 我需要将这 4 个 arrays 合并到一个数组中,然后将其中的对象转换为 arrays。 这用于构建来自另一个 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;
})
如果我继续下面的代码,我会收到 arrays 的结构,请参阅此处,但仍然分开。 我需要以某种方式将它们合并到一个数组中!
var xxy = xy.map(function(obj){
return Object.keys(obj).map(function(key){
return obj[key];
})
})
有一个很棒的 npm package 用于我曾经使用过的这种任务deepmerge您可以使用它将一个或多个 arrays 或对象合并到一个可枚举的属性中。
如果仅在访问时才需要延迟加载值,则可以将累加器 function 变成生成器(用于性能)。 您还可以做其他事情,例如使用 Promise 和生成器来产生值。 尽管如果您没有看到任何性能问题,则没有必要。
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 设置为对您的最后一个数据的引用。在 forEach 循环中迭代的_latlngs,这就是为什么您只得到最后一个。 您应该直接使用 map coordsArray。
xxy = coordsArray.map(function(data){
var obj = data._latlngs;
return Object.keys(obj).map(function(key){
return obj[key];
})
})
使用 Object.values、解构和箭头函数来简化语法:
xxy = routeLayer.map( ({ _layers: { _latlngs: xy }) => Object.values(xy) );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.