在数组中查找重复项的JavaScript函数将结果打印两次怎么修?

问题描述

我现在正在使用的JavaScript代码扫描一个数组并查找重复项。但是,如果数组中有两个以上相同的条目,它将打印该条目两次。

请参见代码段,其中数组arr具有字符串"one"三次,以便输出两次。

如何编辑JavaScript函数,以使输出不会重复打印两次?

var arr = ["one","two","one","three","four","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)

解决方法

您可以存储出现次数而不是boolean

var arr = ["one","two","one","three","four","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)

,

使用另一个缓存

var arr = ["one","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))