【问题标题】:JavaScript function that finds duplicates in an Array prints results twice. How to fix?在 Array 中查找重复项的 JavaScript 函数会打印两次结果。怎么修?
【发布时间】:2020-12-02 17:31:09
【问题描述】:
我现在使用的 JavaScript 代码扫描一个数组并找到重复项。但是如果数组中有两个以上相同的条目,它会将该条目打印两次。
请参阅代码片段,其中数组 arr 包含字符串 "one" 三次,因此输出被打印两次。
如何编辑我的 JavaScript 函数,使输出不会打印重复的两次?
var arr = ["one", "two", "one", "three", "one", "four", "two", "five", "six"];
var cache = {};
var results = [];
for (var i = 0, len = arr.length; i < len; i++) {
if(cache[arr[i]] === true){
results.push(arr[i]);
}else{
cache[arr[i]] = true;
}
}
console.log(results)
【问题讨论】:
标签:
javascript
arrays
duplicates
【解决方案1】:
您可以存储出现次数而不是boolean:
var arr = ["one", "two", "one", "three", "one", "four", "two", "five", "six"];
var cache = {};
var results = [];
for (var i = 0, len = arr.length; i < len; i++) {
if(cache[arr[i]] === 1){
results.push(arr[i]);
cache[arr[i]] += 1;
}else{
cache[arr[i]] = 1;
}
}
console.log(results)
【解决方案2】:
使用另一个缓存
var arr = ["one", "two", "one", "three", "one", "four", "two", "five", "six"];
var cache = {};
var cache2 = {};
var results = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (cache[arr[i]] === true) {
cache2[arr[i]] = true
} else {
cache[arr[i]] = true;
}
}
console.log(Object.keys(cache2))