假设我们有像这样的数组:
[
{
id: 0,
name: 'A'
longitude: 10
latitude: 12
},
{
id: 1,
name:'B'
longitude: 10
latitude: 12
},
{
id: 2,
name: 'C'
longitude: 11
latitude: 10
},
{
id: 3,
name: 'D'
longitude: 11
latitude: 15
}
]
我想得到一个具有相同经度和纬度的对象数组,如:
[
[
{
id: 0,
name: 'A'
longitude: 10
latitude: 12
},
{
id: 1,
name:'B'
longitude: 10
latitude: 12
}
]
]
想到的唯一方法是循环遍历数组以获取坐标和那里的对象数,然后如果长度大于1但是过程非常复杂,则为每个坐标获取子数组。我在redux react应用程序中使用它,这是在重新渲染之前每次状态更改后计算的。
有没有更有效的方法呢?我想把那些经度和纬度相同的人分组。
您可以按longitude
和latitude
对数据进行排序。接下来,您需要遍历数据并将匹配的对象推送到临时数组,如下所示。最后,您可以返回临时数组。
const arr = [{
id: 0,
name: 'A',
longitude: 10,
latitude: 12,
},
{
id: 2,
name: 'C',
longitude: 11,
latitude: 10,
},
{
id: 3,
name: 'D',
longitude: 11,
latitude: 15,
},
{
id: 1,
name: 'B',
longitude: 10,
latitude: 12
}
];
function cleanData(data) {
data.sort(function (a, b) {
return a.longitude - b.longitude || a.latitude - b.latitude;
});
let tempArr = [];
for (let i = data.length - 1; i >=1 ; i--) {
if (data[i].hasOwnProperty('longitude')) {
if (data[i].longitude === data[i - 1].longitude &&
data[i].latitude === data[i - 1].latitude) {
tempArr.push(data[i], data[i - 1]);
}
} else {
return;
}
}
console.log([...[tempArr]]);
}
cleanData(arr);