假设我们有一个类似的数组:
[
{
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应用中使用了它,它是在每次状态更改后重新渲染之前计算的。
是否有更有效的方法?我想将经纬度相同的那些分组。
答案 0 :(得分:1)
您可以按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);