【发布时间】:2019-02-09 17:47:50
【问题描述】:
我试图理解为什么我的输入是falsy
> palindrome('abaasa')
false
鉴于此回文检查器功能
function palindrome(str) {
return str.split('').every((char, i) => {
return char === str[str.length - i - 1];
});
}
据我了解,every 助手对从数组中获取的每个值进行布尔检查。
分解后它在我看来是这样的。
(0 => a) === (5 => a) // truthy <--- START
(1 => b) === (4 => s) // falsy
(2 => a) === (3 => a) // truthy
我知道有比必要更多的比较,我知道这需要优化。
继续迭代,这是指针相交的地方。
(3 => a) === (2 => a) // truthy
(4 => b) === (1 => s) // falsy
(5 => a) === (0 => a) // truthy <--- STOP
问题
every方法是否足够聪明,可以在找到 虚假比较?如果不是,我的函数如何确定
falsy返回?
【问题讨论】:
-
every()在第一个返回false的比较时停止迭代。但是,当字符串是回文时,您将花费两倍的时间进行检查。 -
every 方法是否足够聪明,可以在发现虚假比较时返回 false?是的,是的!
-
@PatrickRoberts 我认为如果
every()在false比较中停止迭代,那么最好的情况是log(n),它实际上不需要花费两倍的时间
标签: javascript algorithm ecmascript-6 palindrome