Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS回文检查,带“;每";辅助方法分解_Javascript_Algorithm_Ecmascript 6_Palindrome - Fatal编程技术网

Javascript JS回文检查,带“;每";辅助方法分解

Javascript JS回文检查,带“;每";辅助方法分解,javascript,algorithm,ecmascript-6,palindrome,Javascript,Algorithm,Ecmascript 6,Palindrome,我试图理解为什么我的输入是falsy > palindrome('abaasa') false 给定这个回文检查器函数 function palindrome(str) { return str.split('').every((char, i) => { return char === str[str.length - i - 1]; }); } 据我所知,everyhelper对从数组中获取的每个值进行布尔检查 当故障发生时,在我看来是这样的 (0 =>

我试图理解为什么我的输入是
falsy

> palindrome('abaasa')
false
给定这个回文检查器函数

function palindrome(str) {
  return str.split('').every((char, i) => {
    return char === str[str.length - i - 1];
  });
}
据我所知,
every
helper对从数组中获取的每个值进行布尔检查

当故障发生时,在我看来是这样的

(0 => a) === (5 => a) // truthy <--- START
(1 => b) === (4 => s) // falsy
(2 => a) === (3 => a) // truthy
(0=>a)==(5=>a)//truthy 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 
(3=>a)==(2=>a)//truthy
(4=>b===(1=>s)//falsy
(5=>a)==(0=>a)//truthy

正在检查每个条件是否为真(y)。如果其中任何一个被计算为false,那么它将返回false。以下是该公司对其回归的看法:

如果回调函数为每个数组返回truthy值,则为true 元素;否则,错误


您可以通过在
每个
函数中引入
控制台.log
语句来检查它是否足够智能。这将允许您实际看到它停在哪里

函数回文(str){
返回str.split(“”).every((字符,i)=>{
控制台日志(i);
返回字符===str[str.length-i-1];
});
}
设str='abaasa';
console.log(回文(str));//prints:0 1 false
函数用于对数组中的每个元素执行布尔检查

因此,如果你有:

const数组=[0,10,14]

问题是你想知道数组中的每个值是否都大于5

您可以编写如下代码:

array.every((val)=>val>5)

我们将获取数组,调用其上的
every()
函数,并传入一个函数来调用数组上的每个元素。因此,我传入了
val
,检查0是否大于5,这将返回false

each()
函数运行时,它会检查每个函数运行时的
返回值,如果任何函数返回false,则整个表达式也会返回false,但是如果它为每个元素返回true,则整个函数表达式返回true

因此它返回数组中每个元素的比较

请记住,使用
every()
数组帮助器解析回文,所做的工作是原来的两倍。这是一个解决方案,但它所做的工作是需要做的两倍

所以你返回falsy的原因是因为每个角色都不是另一边角色的镜像

你的意思是:

返回字符===str[str.length-i-1]

返回数组另一侧的第一个元素和镜像元素之间的比较

[abaasa]

a === a // true
b === s // false
a === a // true
这里有一个错误,所以它不是回文

如果它是回文:

[abaaba]

a === a // true
b === b // true
a === a // true

every()
在返回
false
的第一次比较时停止迭代。然而,当字符串是回文时,您将花费两倍于必要时间的时间来检查。every方法是否足够聪明,在发现错误的比较时返回false?是的@PatrickRoberts我认为如果
every()
false
比较中停止迭代,那么最好的情况是
log(n)
它实际上不需要花费两倍于需要的时间