gpt4 book ai didi

javascript - 为什么在 reduce 函数中返回局部变量的长度会抛出错误?

转载 作者:行者123 更新时间:2023-11-29 21:11:12 25 4
gpt4 key购买 nike

目前正在做这个挑战:https://www.codewars.com/kata/shortest-word/train/javascript

找出字符串中最短的单词。

这个有效:

function findShort(s){
return s.split(' ').reduce((a, b) => b.length < a.length ? b : a).length;
}

但这不是:

function findShort(s){
return s.split(' ').reduce((a, b) => b.length < a.length ? b.length : a.length);
}

知道为什么我不能返回 a 或 b 的长度,即使它们应该是字符串吗?我显然在这里遗漏了一些东西......

谢谢

最佳答案

.reduce() 回调的返回值是每次回调调用连续传递的值。如果回调的第一次迭代仅返回 .length 值,则该 number 将传递给第二次迭代。发生这种情况时,您的代码将尝试在数字上查找 .length 属性,但该属性不存在,您最终会处理 undefined 值。

因此,在代码的第一个(工作)版本中,回调首先被调用,a 是拆分字符串的第一个单词,b 是第二个单词.它返回 ab。然后再次调用回调,第一次调用的结果为 a,第三个单词为 b。重复该过程,直到最后一个单词作为 b 传递并返回最终字符串。然后,在 .reduce() 完成后,代码获取最短字符串的 .length

在第二个(非工作)版本中,第一次调用与工作版本中一样,第一个单词为 a,第二个为 b。回调返回较短单词的长度。因此,在第二次调用回调时,a 是一个数字(先前返回的较短长度),b 是第三个单词。访问 a.length 将是 undefined,因此比较将为 false,函数将返回 a.length ,这是 undefined。在回调的第三次调用中,a 将因此为 undefined,并且尝试访问 a.length 将引发异常。

关于javascript - 为什么在 reduce 函数中返回局部变量的长度会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41792387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com