Нажав на строку вместо массива не удается - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь изменить строку ввода.Однако, когда я пытаюсь изменить 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 голосов
/ 20 октября 2018

Метод массива .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 и вместо этого вернуть полученную строку.

0 голосов
/ 20 октября 2018

Почему бы просто:

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!`);
0 голосов
/ 20 октября 2018

Вы на самом деле ничего не возвращаете из своей функции.Я думаю, что это означает, что ваше возвращаемое значение undefined в JS.Используйте ключевое слово return вместо падения конца вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...