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;
}