【发布时间】:2019-12-31 22:32:06
【问题描述】:
对于编码挑战,我有一个(几乎)可行的解决方案:
function addLetters(...letters) {
let sum = 0;
const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
if (typeof letters === 'undefined' || letters === [] || letters === undefined) {
return 'z';
}
for (let i = 0; i < letters.length; i++) {
sum += (alphabet.indexOf(letters[i]) + 1);
}
if (sum <= 26) {
return alphabet[sum - 1];
} else {
while (sum > 26) {
sum = (sum - 26);
if (sum <= 26) {
return alphabet[sum - 1];
}
}
}
}
console.log(addLetters())
但正如您所见,在 console.log(addLetters()) 这个特殊情况下,它返回的是 undefined 而不是 'z' - 这是为什么呢?
我认为这一定与...letters 是rest / default / destructured / spread 参数的方式有关。
事实上,挑战确实希望参数显示为 spread,但我不知道如何适应它。
编辑挑战测试规范:
【问题讨论】:
-
letters参数将永远是=== []— 它们是两个不同的数组。 -
换句话说
[] === []总是false。 -
有趣,所以关键是检查
array.length === 0,正如 Code Maniac 指出的那样。 -
typeof letters === 'undefined'和letters === undefined不需要同时测试,它们的意思是一样的。 -
而且我认为散布参数永远不会是未定义的,因此也没有必要进行测试。
标签: javascript arguments parameter-passing