我正在尝试更改输入字符串。但是,当我尝试将resultArray
更改为字符串时,它将无法工作。当我在typeof
上调用resultArray
时,它返回对象。
let input = 'Coding is so great.';
const vowels = ['a', 'e', 'i', 'o', 'u'];
let resultArray = [];
function getVowels(input) {
for (let i = 0; i < input.length; i++) {
for (let j = 0; j < vowels.length; j++) {
if (vowels[j] === input[i]) {
resultArray.push(vowels[j]);
}
}
if (input[i] == 'e') {
resultArray.push(input[i]);
}
if (input[i] == 'u') {
resultArray.push(input[i]);
}
}
resultArray.join('');
console.log(resultArray);
}
getVowels(input);
答案 0 :(得分:1)
数组.join
方法不会以任何方式使数组变异。它返回连接元素的字符串。在您的代码段中,您将在调用resultArray
之后记录原始join
,而此时您应该记录join
调用本身的结果:
let input = 'Coding is so great.';
const vowels = ['a', 'e', 'i', 'o', 'u'];
let resultArray = [];
function getVowels(input) {
for (let i = 0; i < input.length; i++) {
for (let j = 0; j < vowels.length; j++) {
if (vowels[j] === input[i]) {
resultArray.push(vowels[j]);
}
}
if (input[i] == 'e') {
resultArray.push(input[i]);
}
if (input[i] == 'u') {
resultArray.push(input[i]);
}
}
console.log(resultArray.join('')); // <-- this is the value you want, not `resultArray`
// console.log(resultArray);
}
getVowels(input);
如果您确实想将resultArray
更改为字符串,则必须重新分配它:
resultArray = resultArray.join('')
但我不建议您这样做。通常,应该避免函数内部出现类似的副作用。最好在resultArray
中定义getVowels
并返回结果字符串。
答案 1 :(得分:1)
为什么不只是:
let vowels = "Coding is great".split('').filter(c => /[aeiou]/.test(c));
console.log(vowels.join(''));
此外,您可以对其进行标记:
function vowels(tmpl, ...parts) {
return tmpl.reduce((s, t, i, arr) => s += t + (i<arr.length-1 ? parts[i] : ''))
.split('')
.filter(c => /[aeiou]/.test(c)).join('');
}
console.log(vowels `Coding is great!`);
答案 2 :(得分:-1)
您实际上并没有从函数中返回任何内容。我认为这意味着您的返回值为JS中的undefined
。使用return
关键字,而不要使用函数结尾。