如何对包含坐标对象的array进行转换与过滤分组
按经纬度分组数组对象的解决方案
嘿,这个需求用JavaScript处理起来很简单,咱们可以借助Array.prototype.reduce方法来实现按经纬度分组的逻辑,下面直接上代码和解释:
实现代码
// 你的原始数组 const originalArray = [ { latitude: 00, longitude: 11 }, { latitude: 22, longitude: 33 }, { latitude: 00, longitude: 11 } ]; // 核心分组逻辑 const groupedArray = Object.values( originalArray.reduce((groupMap, currentItem) => { // 生成唯一标识键:把纬度和经度拼接成字符串,确保相同经纬度的键一致 const groupKey = `${currentItem.latitude},${currentItem.longitude}`; // 如果当前键还没有对应的数组,就初始化一个空数组 if (!groupMap[groupKey]) { groupMap[groupKey] = []; } // 把当前对象加入对应分组的数组 groupMap[groupKey].push(currentItem); return groupMap; }, {}) // 初始值是一个空对象,用来存储分组映射 ); // 打印结果看看 console.log(groupedArray);
代码解释
reduce遍历分组:用reduce遍历原始数组,groupMap作为累加器,负责存储「经纬度组合键」和「对应对象数组」的映射关系。- 生成唯一键:把每个对象的
latitude和longitude用逗号拼接成字符串,这样相同经纬度的对象会生成完全一样的键,保证它们被分到同一组。 - 初始化分组数组:如果
groupMap里还没有当前键对应的数组,就先创建一个空数组。 - 提取最终结果:最后用
Object.values()把groupMap里的所有数组提取出来,就得到了你想要的二维数组结构。
补充说明
- 原始数组里的
00会被JS自动解析为数字0,但这不影响分组逻辑,因为0和0是严格相等的。 - 如果你的经纬度是字符串类型(比如
"00"),这个方法同样适用,只要保持键的生成逻辑一致就行。
内容的提问来源于stack exchange,提问作者Alexander Rodin
相关产品推荐
相关产品推荐

