使用RegExp循环数组而不是for循环(Javascript)
Using RegExp to loop through arrays instead of for loops (Javascript)
我有以下代码可以工作。但是使用正则表达式会是更有效的代码吗?
(如果数组的第一个元素中的字符串包含数组第二个元素中字符串的字母,则返回 true。
function mutation(arr) {
var first = arr[0].split("");
var second = arr[1].split("");
var answer = false;
for (var e = 0; e < second.length; e++) {
answer = false;
for (var i = 0; i < first.length; i++) {
if (first[i] === second[e]) {
answer = true;
}
}
}
return answer;
}
mutation(['hello', 'hey']);
使用正则表达式执行此检查,如上面显示的代码:
var a = 'hello how are you';
var b ='hey you there';
var result = new RegExp(b.split(/ +/)[0].split('').join('|')).test( a.split(/ +/)[0] );
//=> true
- 第一个
split(/ +/)[0]
用于从两个字符串中获取第一个单词 - 然后
split('')
用于从第二个输入的第一个单词中获取每个字母 -
join('|')
用于通过|
加入它们,以使正则表达式成为h|e|y
-
new RegExp
用于构造正则表达式对象 -
test
用于执行正则表达式
在 ES6 中可以这样写:
function mutation(lettersSource, checkedString) {
var referenceLetters = new Set(lettersSource); // get letters from string
var usedLetters = new Set(checkedString);
// create union of letters in both strings
var lettersUnion = new Set([...usedLetters, ...referenceLetters]);
return lettersUnion.size === referenceLetters.size;
}
此解决方案O(m+n+k)
其中m
和n
是字符串中的字母数,k
是使用的字母数。
您的解决方案O(m*n)
,效率很低。
在 ES5 中,Object
可以和字典一起使用,只收集字母,但对于许多可能的字母(Unicode 字符串)来说,它会更慢。
如果你不必关心内存使用情况,你可以使用 .charCodeAt
创建密集数组来索引数组中的元素,以便 O(1) 访问以检查元素是否存在 ( O(m+n+k)
)。
相关文章:
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- 双“for”循环(循环)
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- Javascript在for循环中等待处理请求
- 我没有'I don’我不理解for在循环中的用途
- 为什么在 Javascript 中使用空的 for 循环 - for(;;).
- 错误后如何停止循环“FOR”
- 如何使用循环 for 与 java 脚本一起检查输入中的值
- 如何正确使用ngRepeat,同时使用循环for
- 是否可以使用循环(for/while)来制作动画?
- 在循环for循环时如何进入和退出
- Javascript原型循环for in数组
- 在对象数组中循环for
- Javascript循环:for循环工作,但不能映射
- 如何创建一个循环"for"在json