我有一个数组有上百个对象包含地理定位数据,像这样:如何通过独特的密钥来获得第一n个对象/值
var geoArray = [
{
name: "a",
latitude: 34.0500,
longitude: 118.2500
...
},
{
name: "b",
latitude: 40.7127,
longitude: 74.0059,
...
},
...
];
我想抓住每一个独特的经/纬度的第10个对象将这些对象集合放入一个新数组中。什么是实现这一目标的有效方法?我愿意使用lodash或下划线。
使用下划线的uniq
我能做到以下几点,但这只让我基于纬度/经度而不是第10的第一个对象:
_.uniq(geoArray,function(element) { return element.latitude + "_" + element.longitude});
这是_uniq
的实际定义:
_.uniq(array, [isSorted], [iteratee])
我需要的功能基本上会看起来像: _.uniq(array, [isSorted], [iteratee], [limit])
其中limit
默认是1,但我想如T o输入10.我知道我可以首先获取独特的经纬度对,然后找出哪些对象具有每个对象,并最多将它们推到一个数组中,等等。但我希望有一种更有效的方法。
这里是应用下面的非常有用的答案后,工程确切的代码:
function getUnique(arr, limit) {
var indices = [];
var out = [];
for (var i = 0, l = arr.length; i < l; i++) {
var location = arr[i].latitude + '_' + arr[i].longitude;
if (indices.indexOf(location) === -1) {
out.push(arr.filter(function (el) {
return el.latitude + '_' + el.longitude === location
}).slice(0, limit));
indices.push(location);
}
}
return out;
}
您应该在问题中发布您尝试的代码。请不要指望我们为您解决问题,而不是先尝试自己解决问题。 – Andy