如何动态按顺序结构化合并嵌套经纬度数组生成坐标对数组?
动态合并经纬度数组的解决方案
嘿,我明白你的需求了——要把两个嵌套的经纬度数组合并成对应位置的坐标对数组,而且得是能适配任意长度的动态方式对吧?你之前的代码问题确实出在固定了数组长度,而且没有按索引取单个元素,反而直接把整个子数组塞进去了,自然得不到想要的结果。
下面给你两种靠谱的动态实现方式:
方式一:使用map方法(简洁高效)
map方法天生适合这种遍历数组并生成新数组的场景,完全不用手动管循环次数,自动适配原数组长度:
var lat = [[45.4668729,44.8013268,45.4384958]]; var lng = [[9.1907501,10.3278351,10.9924122]]; // 动态合并坐标对 var finalArray = lat[0].map((currentLat, index) => { return [currentLat, lng[0][index]]; }); console.log(finalArray); // 输出结果:[[45.4668729,9.1907501],[44.8013268,10.3278351],[45.4384958,10.9924122]]
原理说明:
lat[0]是存储纬度的一维数组,map会逐个遍历它的元素- 遍历过程中,
currentLat是当前的纬度值,index是它在数组里的位置 - 用同一个
index去取lng[0]里对应的经度值,把两者打包成子数组,最终所有子数组就构成了你要的结果数组
方式二:使用动态长度的for循环(兼容性好)
如果需要兼容更旧的JavaScript环境,或者你更习惯传统循环写法,可以用这种方式:
var lat = [[45.4668729,44.8013268,45.4384958]]; var lng = [[9.1907501,10.3278351,10.9924122]]; var finalArray = []; // 基于lat[0]的长度动态设置循环次数(前提是lng[0]和它长度一致) for (var i = 0; i < lat[0].length; i++) { // 按索引取对应位置的经纬度,组合成子数组后推入结果 finalArray.push([lat[0][i], lng[0][i]]); } console.log(finalArray);
原理说明:
- 先创建空数组
finalArray用来存结果 - 循环次数由
lat[0].length决定,完全动态,不用写死数字3 - 每次循环通过
i索引分别取出对应位置的纬度和经度,组合成子数组后用push添加到结果数组里
为什么你之前的代码不对?
你之前的代码里:
var finalArray = new Array(3); // 固定了长度3,没法适配元素数量变化 for (var i = 0; i < finalArray.length; i++) { finalArray[i] = new Array(lat[0],lng[0]); // 把整个lat[0]和lng[0]数组放进去了,不是单个元素 }
这样得到的每个子数组都会是[[所有纬度],[所有经度]],而不是你想要的单个坐标对,而且长度固定死了,扩展性很差。
内容的提问来源于stack exchange,提问作者Alessandro Ferrigno
相关产品推荐
相关产品推荐

