我有一个带有一些字符串的数组,想要遍历数组以检查我没有两个相同的字符串。
在java / javascript中,我会使用如下的equals()方法,但这似乎不起作用。
findCherries
还有其他功能或简单方法吗?
答案 0 :(得分:0)
您需要使用===
运算符或for(var i = 1; i < array.length; i++){
if(array[i] === array[i-1]){
array.splice(i);
}
}
运算符(有关差异的详细信息,请参见Which equals operator (== vs ===) should be used in JavaScript comparisons)。
所以:
let array = ["one", "two", "one", "three", "two", "four", "one"];
array.sort((a, b) => {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}).filter((item, index) => item !== array[index - 1]); // ["four", "one", "three", "two"]
但是你需要对数组进行排序才能正常工作 这是一个有效的实现:
for(var i = 1; i < array.length; i++){
if(array[i] == array[i-1]){
array.splice(i);
}
}
如果你的数组包含日期,那么你应该这样做:
for(var i = 1; i < array.length; i++){
if(array[i].toString() === array[i-1].toString()){
array.splice(i);
}
}
或者
databasestorage
答案 1 :(得分:0)
我担心你建议的算法不起作用,除非字符串数组按顺序排列,因此重复的条目彼此相邻。
如果数组的大小很小,那么一个非常直接的解决方案是在数组上循环两次,如下所示:
FALSE
其他经典方法包括事先对数组进行排序,然后执行您正在执行的操作,或使用对象/ hashset过滤元素。
答案 2 :(得分:0)
这是一个使用reduce&amp; amp; Object.key的。
它在性能方面也应该相当不错,因为它使用对象文字作为一种查找。
let array = ["one", "two", "one", "three", "two", "four", "one"];
let deduped = Object.keys(array.reduce((c,a) => { c[a]=true; return c; },{}))
console.log(deduped);