是否可以使用Javascript中的Set搜索一系列值?

时间:2018-04-10 19:41:59

标签: javascript arrays set

我有一组由数组制作的字母,我想知道它们中是否有来自[a-z]的任何字符。

let letterArr = ['a','d','w','e','r','q','y', 'w'];
let mySet = new Set(letterArr);

console.log(mySet.has('a')); //true
console.log(mySet.has('q')); //true

我可以使用has()搜索一系列字符或数字吗?

3 个答案:

答案 0 :(得分:1)

没有。 Sets don't even allow for custom equalities,他们不进行自定义比较(如“大于a且小于z”。

当然,您可以轻松地测试范围中的每个值,无论它是在集合中,还是集合中的每个值是否在范围内(以较快者为准),但这不是非常有效。如果您需要对大范围和大型集合执行此操作,那么您应该考虑基于search tree的自己的Set实现,可以搜索具有对数时间复杂度的范围。

答案 1 :(得分:1)

我会这样做,而不是设置。

let letterArr = ['a','d','w','e','r','q','y', 'w'];
let str = letterArr.join('');

// Just to make sure this function exists
String.prototype.contains = function(x){ 
   return this.indexOf(x)!=-1;
}

console.log(str.contains('a')); //true
console.log(str.contains('q')); //true
console.log(str.contains('z')); //false

答案 2 :(得分:0)

function mySet(char){

    let letterArr = ['a','d','w','e','r','q','y','w'].join(''),
        check = new RegExp('['+char+']','gi')

    return check.test(letterArr)

}

console.log(mySet("a")) // true
console.log(mySet("x")) // false