gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:01:39 26 4
gpt4 key购买 nike

考虑以下数组:

['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);

但这不是很短。我可以执行 indexOf 但这会循环两次。我还考虑过使用如下集合:

const letter_set = new Set(array)
return (letter_set.has('a') && letter_set.has('b'))

但我对集合很不熟悉,不知道这个解决方案是否可能比循环更昂贵。我知道 has() 操作应该比数组迭代更快,但构建集合可能至少需要 O(N) 时间(我假设)。

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

最佳答案

您可以使用 everyincludes做这个检查。

所以我们说每个项目都必须包含在数组中。

function contains(arr, ...items) {
return items.every(i => arr.includes(i))
}

console.log(contains(['a', 'b', 'a'], 'a', 'b'))
console.log(contains(['a', 'c', 'c'], 'a', 'b'))
console.log(contains(['a', 'b', 'c'], 'a', 'b', 'c'))
console.log(contains(['a', 'b', 'c', 'd'], 'a', 'b', 'c', 'd', 'e'))

关于javascript - 检查数组是否包含 2 个不同值的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com