【发布时间】:2019-02-28 00:47:31
【问题描述】:
我正在使用 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"}
Location基本上就是一个用来计算距离的经纬度数组,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"}
(可选)这是它存储这些位置的方式:
...
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)
....
}
确实,这个问题可能已经被问过了,我一直在挖掘所有类似的问题并发现了这些功能:
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)
没有用,我得到了相同的列表,但有重复项。
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);
而且,它没有工作..
3.唯一的
onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}
var newlist = list.filter(onlyUnique)
不幸的是它没有工作......
这些是针对从数组中删除重复项的类似问题给出的一些答案,但没有一个有效。我不明白为什么它们不适用于我的数组类型,如果有人有想法或知道为什么会非常有帮助。
【问题讨论】:
-
您的方法不起作用,因为所有对象,即使它共享所有相同的键/值,都是不同的实例(除非这不是单例)
-
你能分享示例 JSON。这对我们会更好
-
不使用增量 id (0, 1, 2, 3,...) 作为道具名称但使用与对象相关的 id 是否也是一种解决方案?这将确保您没有重复记录。
-
你不能这样比较对象:
{} === {}returnfalse -
这不是重复的,你是对的@RobG 我改成了 Geofire 对象
标签: javascript angular firebase geofire