Javascript reduce Boolean意外返回

Javascript reduce Boolean意外返回,javascript,arrays,reduce,shorthand,Javascript,Arrays,Reduce,Shorthand,尝试创建一个函数来检查高数字,即每个数字都小于或等于其右侧的数字,如123、059等 以下代码是问题所在: const n = parseInt(readline()); if (n.toString().length === 1) console.log('true'); else { var z = n.toString().split(''); console.log(z.reduce((a, b) => b > a)); } 此测试失败:012230

尝试创建一个函数来检查高数字,即每个数字都小于或等于其右侧的数字,如123、059等

以下代码是问题所在:

const n = parseInt(readline());
if (n.toString().length === 1)
    console.log('true');
else
{
    var z = n.toString().split('');
    console.log(z.reduce((a, b) => b > a));
}
此测试失败:01223047在应返回false时返回true

它在许多其他测试中都有效,但不是这个值。reduce不应该测试每一对并返回true/false吗?如果有一个false,它应该返回false,对吗?我使用reduce错误吗?是否有其他函数可以用来简化此测试而不是编写循环?

请记住,使用reduce时,提供给回调的第一个参数是上一次回调调用的返回值。在第一个调用中,如果您没有提供种子值-而且您没有-第一个值将是数组中的第一个条目

所以不,reduce不会测试每一对。它测试第一对,然后根据前一个回调的返回标志分别测试其余的值

对于您正在做的事情,您可能需要一个简单的循环,或者,或者每个循环。对于some和every,您将使用提供的索引作为回调的第二个参数来获取下一个或上一个字符。使用each还可以消除单个字符串的特殊情况:

函数teststr,expect{ const z=str.split;//我可能会在ES2015上使用`=Array.fromstr;`+ const result=z.everych,i=>i==0 | | ch>z[i-1]; console.logstr,result,!result==!expect?Good:error; } test123,对; test1为真; test21,假 请记住,使用reduce时,提供给回调的第一个参数是上一次回调调用的返回值。在第一个调用中,如果您没有提供种子值-而且您没有-第一个值将是数组中的第一个条目

所以不,reduce不会测试每一对。它测试第一对,然后根据前一个回调的返回标志分别测试其余的值

对于您正在做的事情,您可能需要一个简单的循环,或者,或者每个循环。对于some和every,您将使用提供的索引作为回调的第二个参数来获取下一个或上一个字符。使用each还可以消除单个字符串的特殊情况:

函数teststr,expect{ const z=str.split;//我可能会在ES2015上使用`=Array.fromstr;`+ const result=z.everych,i=>i==0 | | ch>z[i-1]; console.logstr,result,!result==!expect?Good:error; } test123,对; test1为真;
test21,假;01223047是337447,作为一个整数,您需要将n作为一个字符串,并在reduce函数中将其解析为int。因此:大括号有点奇怪……仅从readline解析字符串,然后反复将其转换回字符串,这似乎很奇怪。。。特别奇怪的是,如果您的示例中有一个前导数字0,则删除前导数字。01223047是337447的整数,您需要将n作为字符串,并在reduce函数中将其解析为int。因此:大括号有点奇怪……仅从readline解析字符串,然后反复将其转换回字符串,这似乎很奇怪。。。特别奇怪的是,如果你的一个例子有一个前导数字0,因为这样做会删除前导数字。快告诉我有趣的是,有另一种方法可以从组合的角度来看待这个问题。这些数字有多少个组合,其中每个数字都大于或等于其左边的数字?只有一种可能的组合!这意味着我们基本上是在检查排序顺序:``const isTall=n=>{const arr=+n.split;return arr===arr.sort;}````@JamieDixon-:-非常正确。您需要将这些数组转换回===检查的字符串。是的!这也提醒我,排序是变异的。我真想知道为什么['b','a']==['a','b']总是回到真的:让我来吧有趣的是,有另一种方法可以从组合的角度来看待这个问题。这些数字有多少个组合,其中每个数字都大于或等于其左边的数字?只有一种可能的组合!这意味着我们基本上是在检查排序顺序:``const isTall=n=>{const arr=+n.split;return arr===arr.sort;}````@JamieDixon-:-非常正确。您需要将这些数组转换回===检查的字符串。是的!这也提醒我,排序是变异的。我确实想知道为什么['b','a']=['a','b']总是返回true: