对于编码挑战,我有一个(几乎)可行的解决方案:
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参数的方式有关。
事实上,挑战确实希望参数显示为价差,但我不知道如何适应。
编辑挑战测试规范:
答案 0 :(得分:3)
letters === []
将始终为 false ,因为它们是 两个不同的引用 ,它们的取值永远不会为true,因此您需要检查数组的长度检查它是否为空
您还可以安全地从if语句中删除其他两个条件,因为letters
将始终是数组
function addLetters(...letters) {
let sum = 0;
const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
if (letters.length === 0) {
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())
答案 1 :(得分:1)
尝试一下。 :)
function addLetters(...letters) {
let sum = 0;
const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
if (!letters.length) {
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];
}
}
}
}