Javascript 从多个参数中查找重复项

Javascript 从多个参数中查找重复项,javascript,duplicates,Javascript,Duplicates,所以基本上我有这个功能: function areThereDuplicates(a,b,c,d) { if (typeof d === 'undefined') { d = 'default'; } let arr = new Array(a,b,c,d) if(arr.length == 0){ return false } let counter = {}; for (let i =0; i < arr.length; i++){

所以基本上我有这个功能:

function areThereDuplicates(a,b,c,d) {
  if (typeof d === 'undefined') { d = 'default'; }
  let arr = new Array(a,b,c,d)
  if(arr.length == 0){
      return false
  }

  let counter = {};

  for (let i =0; i < arr.length; i++){
      let digit = arr[i];
      counter[digit] ? counter[digit] += 1 : counter[digit] = 1
  }

   let values = Object.values(counter)
   for (let i = 0 ; i < values.length; i++){
     if(values[i] != 1){
       return true
     }
   }
  return false

}
函数有重复项(a、b、c、d){
如果(typeof d=='undefined'){d='default';}
设arr=新数组(a,b,c,d)
如果(arr.length==0){
返回错误
}
让计数器={};
for(设i=0;i
该函数最多有4个参数,工作正常。我如何创建另一个变量或其他东西来假设参数的数量可能会增加到n,同时将精确的元素添加到新数组“arr”中

或者更好的是,如何避免使用创建新数组来获取参数


谢谢大家!

每个函数都包含一个类似数组的变量,名为
arguments
,其中包含所有参数。您可以将其展开以获得阵列

function areThereDuplicates() {
    arr = [...arguments];
    // ...etc...
}
函数是否存在重复项(){
设arr=[…参数]
如果(arr.length==0){
返回错误
}
让计数器={};
for(设i=0;i
除此之外,正如另一个答案所建议的(但与建议相反,您可以直接在代码中使用它,它有
[]
长度
),您还可以使用

然后函数就可以变成

function areThereDuplicates() {
  return arguments.length !== new Set(arguments).size;
}

然而,说到复杂性:对于“是/否”回答,当循环遇到重复时,它可能会立即返回。找到更多的重复项不会产生“更强的”
true

function areThereDuplicates() {
  for(let i=0; i<arguments.length-1; i++) {
    let current=arguments[i];
      for(let j=i+1; j<arguments.length; j++)
        if(current===arguments[j])
          return true;
  }
  return false;
}


是的,我也在考虑这个问题。set方法的O()是什么?@octaviand最坏情况的复杂性与您的循环类似。只是
Set
s通常是散列集(平均查找性能更好),而
Set()
是本机代码,不等待JIT。
function areThereDuplicates() {
  for(let i=0; i<arguments.length-1; i++) {
    let current=arguments[i];
      for(let j=i+1; j<arguments.length; j++)
        if(current===arguments[j])
          return true;
  }
  return false;
}