Javascript .reduce 布尔值意外 Return
Javascript .reduce Boolean Unexpected Return
正在尝试创建一个函数来检查高数(即每个数字都小于或等于其右边的数字,例如 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(return 正确,但应 return 错误)。
它适用于许多其他测试,但不适用于此值。不应该减少测试每一对和 returning true/false 吗?如果有一个错误,它应该 return 错误,对吗?我是否错误地使用了 reduce?我可以使用另一个函数来 shorthand 这个测试而不是写一个循环吗?
请记住,对于 reduce
,提供给回调的第一个参数是上一次调用回调的 return 值。 (在第一次调用中,如果您没有提供种子值——而且您也没有提供——第一个值将是数组中的第一个条目。)
所以不,reduce
不会测试每一对。它测试第一对,然后根据前一个回调的 returned 标志测试其余值(单独)。
对于您正在做的事情,您可能需要一个简单的循环,或者 some
, or every
(可能 every
)。使用 some
和 every
您将使用作为回调的第二个参数提供的索引来获取下一个(或上一个)字符。使用 every
也会消除单字符字符串的特殊情况:
function test(str, expect) {
const z = str.split(""); // I'd probably use `= Array.from(str);` on ES2015+
const result = z.every((ch, i) => i === 0 || ch > z[i - 1]);
console.log(str, result, !result === !expect ? "Good" : "ERRROR");
}
test("123", true);
test("1", true);
test("21", false);
(可能存在使用 localCompare
的争论:ch.localeCompare(z[i - 1]) > 0
而不是 ch > z[i - 1]
。)
正在尝试创建一个函数来检查高数(即每个数字都小于或等于其右边的数字,例如 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(return 正确,但应 return 错误)。
它适用于许多其他测试,但不适用于此值。不应该减少测试每一对和 returning true/false 吗?如果有一个错误,它应该 return 错误,对吗?我是否错误地使用了 reduce?我可以使用另一个函数来 shorthand 这个测试而不是写一个循环吗?
请记住,对于 reduce
,提供给回调的第一个参数是上一次调用回调的 return 值。 (在第一次调用中,如果您没有提供种子值——而且您也没有提供——第一个值将是数组中的第一个条目。)
所以不,reduce
不会测试每一对。它测试第一对,然后根据前一个回调的 returned 标志测试其余值(单独)。
对于您正在做的事情,您可能需要一个简单的循环,或者 some
, or every
(可能 every
)。使用 some
和 every
您将使用作为回调的第二个参数提供的索引来获取下一个(或上一个)字符。使用 every
也会消除单字符字符串的特殊情况:
function test(str, expect) {
const z = str.split(""); // I'd probably use `= Array.from(str);` on ES2015+
const result = z.every((ch, i) => i === 0 || ch > z[i - 1]);
console.log(str, result, !result === !expect ? "Good" : "ERRROR");
}
test("123", true);
test("1", true);
test("21", false);
(可能存在使用 localCompare
的争论:ch.localeCompare(z[i - 1]) > 0
而不是 ch > z[i - 1]
。)