为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

考虑以下数组:['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解答欢迎
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

您可以使用everyinclude来执行此检查。

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

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


查看完整回答
反对 回复 2021-05-20
?
DIEA

TA贡献1820条经验 获得超2个赞

您可以仅使用,Set并检查所需项目是否在items数组中。


const

    check = (items, wanted) => wanted.every(Set.prototype.has, new Set(items));


console.log(check(['a', 'b', 'a'], ['a', 'b'])); //  true

console.log(check(['a', 'b', 'c'], ['a', 'b'])); //  true

console.log(check(['a', 'c', 'c'], ['a', 'b'])); // false


查看完整回答
反对 回复 2021-05-20
?
慕少森

TA贡献2019条经验 获得超9个赞

虽然没有其他示例那么紧凑,但是它确实可以单次运行。


const arr1 = ['a', 'b', 'a']; //method should return true

const arr2 = ['a', 'c', 'c']; //method should return false

const arr3 = ['a', 'b', 'c']; //method should return true



const reducer = ({ a, b }, char) => ({

  a: a || char === 'a',

  b: b || char === 'b'

});


const includesAnB = arr => {

  const { a, b } = arr.reduce(reducer, {});

  return a && b;

}


console.log(includesAnB(arr1));

console.log(includesAnB(arr2));

console.log(includesAnB(arr3));


查看完整回答
反对 回复 2021-05-20
  • 3 回答
  • 0 关注
  • 282 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信