Set中每个项目的Javascript Regex

时间:2016-06-30 05:06:16

标签: javascript regex set

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

我有一大堆东西,但我想要正则表达式(或者只是检查字符串的一部分是否存在)。

我在想这样的事情。

mySet = new Set(["foo", "bar", "something SomethingIWant somethingelse"]);

/SomethingIWant/.test(mySet);
// false

mySet.forEach(myRegex(/SomethingIWant/));
// Doesn't work as I expect

基本上我需要一个函数迭代一个集合(我指定),正则表达式测试每个项目(使用我指定的正则表达式)。

javascript是否允许这样做?

2 个答案:

答案 0 :(得分:0)

是的,看起来你走在了正确的轨道上。这对我有用:

let mySet = new Set(["foo", "bar", "something SomethingIWant somethingelse"]);

mySet.forEach(item => console.log( /SomethingIWant/.test(item) ) ); //returns false, false, true

// another way to accomplish the same thing
for(let item of mySet) {
  console.log( /SomethingIWant/.test(item) );
}

一些参考文献: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set(参见“迭代集”部分) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/forEach

以下是您问题的更具体的答案:

function reduceSet(mySet, f, initial) {
    var result = initial;
    for (var v of mySet) result = f(result, v);
    return result;
}

reduceSet(mySet, (aggr, item) => {
    aggr = /SomethingIWant/.test(item);
    return aggr;
});
// => true

设置来自How to map/reduce/filter a Set in JavaScript?

reduce实施方案

我个人不喜欢修改核心JS对象的原型,所以我把它作为自己的功能。但是,对于ES7来说看起来似乎是为了减少套装,所以你可以安全地将它填充。

答案 1 :(得分:0)

最后用@ccnokes解决方案想出来,但想提供我的最终结果。

Set.prototype.regex = function(regex) {
    for(const item of this) {
       if (regex.test(item)) return true;
    }
    return false;
}

let mySet = new Set(["foo bar", "baz qux bar"]);

mySet.regex(/nothing/); // false
mySet.regex(/qux/);     // true