我有一個數組有上百個對象包含地理定位數據,像這樣:如何通過獨特的密鑰來獲得第一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