Pro*_*Man 10 javascript firebase geofire angular
我正在使用Angular 6上的Geofire和Firebase存储位置,不幸的是它存储了大量重复项,这是一个示例(控制台记录我的变量currentHits):
0: {location: Array(2), distance: "48.84", url: "assets/imgs/fix.png"}
1: {location: Array(2), distance: "48.84", url: "assets/imgs/fix.png"}
2: {location: Array(2), distance: "48.84", url: "assets/imgs/fix.png"}
3: {location: Array(2), distance: "48.85", url: "assets/imgs/free.png"}
4: {location: Array(2), distance: "48.85", url: "assets/imgs/free.png"}
5: {location: Array(2), distance: "48.85", url: "assets/imgs/free.png"}
6: {location: Array(2), distance: "48.87", url: "assets/imgs/low.png"}
7: {location: Array(2), distance: "48.87", url: "assets/imgs/low.png"}
8: {location: Array(2), distance: "48.87", url: "assets/imgs/low.png"}
Run Code Online (Sandbox Code Playgroud)
位置基本上是用于计算距离的纬度和经度数组,在id 0,1和2中它的坐标相同,3,4和5也是相同的,...
这就是我想要的:
0: {location: Array(2), distance: "48.84", url: "assets/imgs/fix.png"}
1: {location: Array(2), distance: "48.85", url: "assets/imgs/free.png"}
2: {location: Array(2), distance: "48.87", url: "assets/imgs/low.png"}
Run Code Online (Sandbox Code Playgroud)
(可选)这是它存储这些位置的方式:
...
hits = new BehaviorSubject([])
...
queryHits(...){
....
let hit = {
location: location,
distance: distance.toFixed(2),
url:img
}
let currentHits = this.hits.value
currentHits.push(hit)
this.hits.next(currentHits)
....
}
Run Code Online (Sandbox Code Playgroud)
确实,这个问题可能已经被问到,我一直在挖掘所有相似的问题,并发现了这些功能:
1. RemoveDuplicates()
function removeDuplicates(arr){
let unique_array = []
for(let i = 0;i < arr.length; i++){
if(unique_array.indexOf(arr[i]) == -1){
unique_array.push(arr[i])
}
}
return unique_array
}
var newlist = removeDuplicates(list)
Run Code Online (Sandbox Code Playgroud)
它不起作用我得到相同的重复列表.
2. arrUnique:
function arrUnique(arr) {
var cleaned = [];
arr.forEach(function(itm) {
var unique = true;
cleaned.forEach(function(itm2) {
if (_.isEqual(itm, itm2)) unique = false;
});
if (unique) cleaned.push(itm);
});
return cleaned;
}
var newlist= arrUnique(list);
Run Code Online (Sandbox Code Playgroud)
此外,它没有工作..
只有独特
onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}
var newlist = list.filter(onlyUnique)
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用......
这些是类似问题的一些答案,从数组中删除重复项,但没有一个工作.我不明白为什么他们不适合我的阵列类型,如果有人有想法或知道为什么会非常有帮助.
您可以使用集合来存储和检查重复值。
const removeDuplicates = arr => {
let matches = new Set();
return arr.filter(elem => {
const {distance} = elem;
if(matches.has(distance)){
return false;
} else {
matches.add(distance);
return true;
}
})
}
Run Code Online (Sandbox Code Playgroud)
请记住,使用此方法您可能会删除距离相同但坐标不同的结果。如果这给您带来了问题,那么您还需要检查纬度/经度对。
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |