Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在数字数组+;计数器显示每个数字在内部重复的方式_Javascript_Arrays - Fatal编程技术网

Javascript 如何在数字数组+;计数器显示每个数字在内部重复的方式

Javascript 如何在数字数组+;计数器显示每个数字在内部重复的方式,javascript,arrays,Javascript,Arrays,我需要在数组中找到两次或两次以上的重复项。例如,如果我有字符串数组,这就可以了 var arrStr = 'i do as as becasue i do as'; function CheckDuplicates(sentence) { let arr = sentence.split(" "); let counter = {}; let duplicates = []; for(let i = 0;i <

我需要在数组中找到两次或两次以上的重复项。例如,如果我有字符串数组,这就可以了

var arrStr = 'i do   as as     becasue               i do as';


function CheckDuplicates(sentence)
{
  let arr = sentence.split(" ");
  let counter = {};
  let duplicates = [];

  for(let i = 0;i < arr.length;i++)
  {
    let item = arr[i];
    counter[item] = counter[item] >= 1 ? counter[item] += 1 : 1;
    if(item != "")
    {
      if(counter[item] == 2)
      {
        duplicates.push(item);
      }
    }
  }

  Object.keys(counter)
  .filter(key => !duplicates.includes(key))
  .forEach(k => delete counter[k]);

  return {
    duplicates: duplicates,
    counter: counter
  };

}


let r = CheckDuplicates(arrStr);

c.log(r.duplicates);
c.log(r.counter);
但是使用相同的代码,如果我尝试使用数字数组,我在
c.log(r.counter)中得到{}

我不知道在这种情况下,includes为什么不能处理数字


var arr = [9, 9,  9 ,111, 2, 3, 4, 4, 5, 7 , 7];

function CheckDuplicates(sentence)
{
  let counter = {};
  let duplicates = [];

  for(let i = 0;i < arr.length;i++)
  {
    let item = arr[i];
    counter[item] = counter[item] >= 1 ? counter[item] += 1 : 1;
    if(item != "")
    {
      if(counter[item] == 2)
      {
        duplicates.push(item);
      }
    }
  }

  Object.keys(counter)
  .filter(key => !duplicates.includes(key))
  .forEach(k => delete counter[k]);

  return {
    duplicates: duplicates,
    counter: counter
  };

}


let r = CheckDuplicates(arr);

c.log(r.duplicates);
c.log(r.counter);


Object.keys
将键作为字符串返回,并且
还包括检查类型是否相等

注释行是我唯一更改的内容,您的代码运行良好(我在推入重复的
时转换为字符串,但您也可以在使用
包含
时修复它)

var-arr=[9,9,9,111,2,3,4,4,5,7];
功能检查重复项(句子)
{
让计数器={};
设重复项=[];
for(设i=0;i=1?计数器[项目]+=1:1;
如果(项目!=“”)
{
if(计数器[项目]==2)
{
duplicates.push(`${item}`);//转换为字符串
}
}
}
对象。键(计数器)
.filter(键=>!重复。包括(键))
.forEach(k=>删除计数器[k]);
返回{
复制品:复制品,
柜台:柜台
};
}
设r=检查重复项(arr);
console.log(r.duplicates);

控制台日志(r计数器)我认为问题在于对象键以字符串的形式返回键,同时还包括检查类型(三重相等)

var arr = [9, 9,  9 ,111, 2, 3, 4, 4, 5, 7 , 7];

function CheckDuplicates(sentence)
{
  let counter = {};
  let duplicates = [];

  for(let i = 0;i < arr.length;i++)
  {
    let item = arr[i];
    counter[item] = counter[item] >= 1 ? counter[item] += 1 : 1;
    if(item != "")
    {
      if(counter[item] == 2)
      {
        duplicates.push(item);
      }
    }
  }

  Object.keys(counter)
  .filter(key => !duplicates.includes(key))
  .forEach(k => delete counter[k]);

  return {
    duplicates: duplicates,
    counter: counter
  };

}


let r = CheckDuplicates(arr);

c.log(r.duplicates);
c.log(r.counter);

[9, 4, 7]
{}