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是否允许这样做?
答案 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