推送到字符串而不是数组失败

时间:2018-10-19 23:44:23

标签: javascript arrays function object for-loop

我正在尝试更改输入字符串。但是,当我尝试将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);

3 个答案:

答案 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关键字,而不要使用函数结尾。