我已经编写了这段代码,以便在字符串开始时返回得分最高的单词,但是当我计算出所有单词并想要显示所有结果时,我发现所有结果都是:NaN
function high(x) {
var words = x.split(' ');
var y;
var num = [];
for (var i = 0; i < words.length; i++) {
y = words[i].split('');
for (var d = 0; d < words[i].length; d++) {
if (y[d] == 'a') num[i] += 1;
else if (y[d] == 'b') num[i] += 2;
else if (y[d] == 'c') num[i] += 3;
else if (y[d] == 'd') num[i] += 4;
else if (y[d] == 'e') num[i] += 5;
else if (y[d] == 'f') num[i] += 6;
else if (y[d] == 'g') num[i] += 7;
else if (y[d] == 'h') num[i] += 8;
else if (y[d] == 'i') num[i] += 9;
else if (y[d] == 'j') num[i] += 10;
else if (y[d] == 'k') num[i] += 11;
else if (y[d] == 'l') num[i] += 12;
else if (y[d] == 'm') num[i] += 13;
else if (y[d] == 'n') num[i] += 14;
else if (y[d] == 'o') num[i] += 15;
else if (y[d] == 'p') num[i] += 16;
else if (y[d] == 'q') num[i] += 17;
else if (y[d] == 'r') num[i] += 18;
else if (y[d] == 's') num[i] += 19;
else if (y[d] == 't') num[i] += 20;
else if (y[d] == 'u') num[i] += 21;
else if (y[d] == 'v') num[i] += 22;
else if (y[d] == 'w') num[i] += 23;
else if (y[d] == 'x') num[i] += 24;
else if (y[d] == 'y') num[i] += 25;
else num[i] += 26;
}
}
console.log(...num);
}
high("what time are we climbing up the volcano");
答案 0 :(得分:1)
您必须先初始化num[i]
,然后才能进行+=
function high(x) {
var words = x.split(' ');
var y;
var num = [];
for (var i = 0; i < words.length; i++) {
y = words[i].split('');
for (var d = 0; d < words[i].length; d++) {
if (!num[i]) num[i] = 0; // <--- Add this
if (y[d] == 'a') num[i] += 1;
else if (y[d] == 'b') num[i] += 2;
else if (y[d] == 'c') num[i] += 3;
else if (y[d] == 'd') num[i] += 4;
else if (y[d] == 'e') num[i] += 5;
else if (y[d] == 'f') num[i] += 6;
else if (y[d] == 'g') num[i] += 7;
else if (y[d] == 'h') num[i] += 8;
else if (y[d] == 'i') num[i] += 9;
else if (y[d] == 'j') num[i] += 10;
else if (y[d] == 'k') num[i] += 11;
else if (y[d] == 'l') num[i] += 12;
else if (y[d] == 'm') num[i] += 13;
else if (y[d] == 'n') num[i] += 14;
else if (y[d] == 'o') num[i] += 15;
else if (y[d] == 'p') num[i] += 16;
else if (y[d] == 'q') num[i] += 17;
else if (y[d] == 'r') num[i] += 18;
else if (y[d] == 's') num[i] += 19;
else if (y[d] == 't') num[i] += 20;
else if (y[d] == 'u') num[i] += 21;
else if (y[d] == 'v') num[i] += 22;
else if (y[d] == 'w') num[i] += 23;
else if (y[d] == 'x') num[i] += 24;
else if (y[d] == 'y') num[i] += 25;
else num[i] += 26;
}
}
console.log(...num);
}
high("what time are we climbing up the volcano");
答案 1 :(得分:1)
您需要将所有数组索引设置为0。您可以使用Array(words.length).fill(0)
。
function high(x) {
var words = x.split(' ');
var y;
var num = Array(words.length).fill(0);
for (var i = 0; i < words.length; i++) {
y = words[i].split('');
for (var d = 0; d < words[i].length; d++) {
if (y[d] == 'a') num[i] += 1;
else if (y[d] == 'b') num[i] += 2;
else if (y[d] == 'c') num[i] += 3;
else if (y[d] == 'd') num[i] += 4;
else if (y[d] == 'e') num[i] += 5;
else if (y[d] == 'f') num[i] += 6;
else if (y[d] == 'g') num[i] += 7;
else if (y[d] == 'h') num[i] += 8;
else if (y[d] == 'i') num[i] += 9;
else if (y[d] == 'j') num[i] += 10;
else if (y[d] == 'k') num[i] += 11;
else if (y[d] == 'l') num[i] += 12;
else if (y[d] == 'm') num[i] += 13;
else if (y[d] == 'n') num[i] += 14;
else if (y[d] == 'o') num[i] += 15;
else if (y[d] == 'p') num[i] += 16;
else if (y[d] == 'q') num[i] += 17;
else if (y[d] == 'r') num[i] += 18;
else if (y[d] == 's') num[i] += 19;
else if (y[d] == 't') num[i] += 20;
else if (y[d] == 'u') num[i] += 21;
else if (y[d] == 'v') num[i] += 22;
else if (y[d] == 'w') num[i] += 23;
else if (y[d] == 'x') num[i] += 24;
else if (y[d] == 'y') num[i] += 25;
else num[i] += 26;
}
}
console.log(...num);
}
您还可以将代码重写为
function high(sentence) {
const words = sentence.split(' ');
const num = Array(words.length).fill(0);
for (let i = 0; i < words.length; ++i) {
const word = words[i];
for (let j = 0; j < word.length; ++j) {
num[i] += word.charCodeAt(j) - 96;
}
}
console.log(...num);
}
high("what time are we climbing up the volcano");