Javascript 检查数组是否包含2个不同值的最快方法?

Javascript 检查数组是否包含2个不同值的最快方法?,javascript,arrays,Javascript,Arrays,考虑以下阵列: ['a', 'b', 'a'] //method should return true ['a', 'b', 'c'] //method should return true ['a', 'c', 'c'] //method should return false 我想写一个方法,最有效地检查数组中是否同时存在“a”和“b”。我知道我可以在一个简单的for循环中实现这一点 let a_counter = 0; let b_counter = 0; for (let i = 0;

考虑以下阵列:

['a', 'b', 'a'] //method should return true
['a', 'b', 'c'] //method should return true
['a', 'c', 'c'] //method should return false
我想写一个方法,最有效地检查数组中是否同时存在“a”和“b”。我知道我可以在一个简单的for循环中实现这一点

let a_counter = 0;
let b_counter = 0;
for (let i = 0; i < array.length; i++) {
    if (array[i] === 'a') {
        a_counter++;
    }
    if (array[i] === 'b') {
        b_counter++;
    }
}
return (a_counter > 0 && b_counter > 0);
但我对集合非常不熟悉,不知道这个解决方案是否可能比循环更昂贵。我知道has操作应该比数组迭代更快,但构建集合可能至少需要我假设的时间

是否有一种干净有效的方法来查找数组中的多个元素?ES6回答欢迎

您可以只使用,并检查想要的项目是否在项目数组中

常数 check=items,wanted=>wanted.everySet.prototype.has,newsetitems; 控制台。日志检查['a','b','a'],['a','b'];//符合事实的 控制台。日志检查['a','b','c'],['a','b'];//符合事实的 控制台。日志检查['a','c','c'],['a','b'];//false您可以只使用,并检查想要的项目是否在项目数组中

常数 check=items,wanted=>wanted.everySet.prototype.has,newsetitems; 控制台。日志检查['a','b','a'],['a','b'];//符合事实的 控制台。日志检查['a','b','c'],['a','b'];//符合事实的 控制台。日志检查['a','c','c'],['a','b'];//错误的 include似乎是检查特定元素的一种非常方便的方法,即使有多个元素

includes似乎是检查特定元素的一种非常方便的方法,即使有多个元素。

您可以使用和来执行此检查

所以我们说数组中必须包含每一项

函数包含R,…项{ return items.everyi=>arr.includesi } 日志包含['a','b','a'],'a','b' console.logcontains['a','c','c'],'a','b' console.logcontains['a','b','c','a','b','c' logcontains['a','b','c','d'],'a','b','c','d','e'您可以使用和来执行此检查

所以我们说数组中必须包含每一项

函数包含R,…项{ return items.everyi=>arr.includesi } 日志包含['a','b','a'],'a','b' console.logcontains['a','c','c'],'a','b' console.logcontains['a','b','c','a','b','c'
logcontains['a','b','c','d'],'a','b','c','d','e'不像其他示例那样紧凑,但它在一次运行中就完成了任务

常数arr1=['a','b','a']//方法应返回true 常数arr2=['a','c','c']//方法应返回false 常数arr3=['a','b','c']//方法应返回true const reducer={a,b},char=>{ a:a | | char=='a', b:b | | char==='b' }; 常数includesAnB=arr=>{ 常数{a,b}=arr.reducer,{}; 返回a&b; } console.logincludesAnBarr1; console.logincludesAnBarr2;
console.logincludesAnBarr3 不像其他示例那样紧凑,但它在一次运行中就完成了任务

常数arr1=['a','b','a']//方法应返回true 常数arr2=['a','c','c']//方法应返回false 常数arr3=['a','b','c']//方法应返回true const reducer={a,b},char=>{ a:a | | char=='a', b:b | | char==='b' }; 常数includesAnB=arr=>{ 常数{a,b}=arr.reducer,{}; 返回a&b; } console.logincludesAnBarr1; console.logincludesAnBarr2;
console.logincludesAnBarr3@NinaScholz我对另一个测试用例进行了编辑。我不介意我正在使用的当前函数是否还有其他元素on@NinaScholz我对另一个测试用例进行了编辑。我不介意是否有其他元素,至少对于我正在使用的当前函数,我真的很喜欢这个答案的可读性。由于某种原因,我没有考虑使用每一个我真的喜欢这个答案的可读性。由于某种原因,我没有考虑使用万能的人谁否决了解释为什么?投反对票的人能解释原因吗
const letter_set = new Set(array)
return (letter_set.has('a') && letter_set.has('b')) 
array.includes('a') && array.includes('b')