поменять местами только определенные слова - PullRequest
0 голосов
/ 04 октября 2018

Я пишу функцию для обращения только слов в строке определенной длины, в данном случае 5 или более.Я могу сделать каждое слово обратным, если это длина, но у меня возникают проблемы с возвратом правильных слов обратно в строку.

function spinWords(string){
  let splitString = string.split(" ");
  console.log(splitString);
  splitString.forEach(function(word) {
      if (word.length >= 5) {
        console.log(word.split("").reverse().join(""));
        return word.split("").reverse().join("");
        
     } else if (word.length < 5) {
        console.log(word);
        return word;
    }
    //should something go here?
  });
  console.log(splitString); //returns same output as when called at top of function
  newString = splitString.join(" ");
  console.log(newString);
}

spinWords("Jammerson is the best friend ever");

В качестве альтернативы, когда я сохраняю функцию forEach () в новой переменной, функция возвращается как неопределенная.Я не уверен, какой кусок мне не хватает.Заранее спасибо!

Ответы [ 3 ]

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

Вам просто нужно немного исправить:

function spinWords(string){
  let splitString = string.split(" ");
  console.log(splitString);
  splitString.forEach(function (word, index, arr)  {
      if (word.length >= 5) {
        console.log(word.split("").reverse().join(""));
        arr[index] = word.split("").reverse().join("");
        
     } else if (word.length < 5) {
        console.log(word);
        arr[index] = word;
    }
    //should something go here?
  });
  console.log(splitString); //returns same output as when called at top of function
  newString = splitString.join(" ");
  console.log(newString);
}

spinWords("Jammerson is the best friend ever");
0 голосов
/ 04 октября 2018

Вместо итерации массива с forEach вы хотите map перевести его в новый массив обращенных слов:

 splitString = splitString.map(function(word) {

, тогда возвращенные слова будут приняты.Это может быть сокращено до следующего:

 const reverseWord = str => str.length >= 5 ? str.split``.reverse().join`` : str;
 const spinWords = str => str.split` `.map(reverseWord).join` `;
0 голосов
/ 04 октября 2018

Прежде всего, ваша функция должна вернуть значение.Также попробуйте создать еще одну строку с новым значением:

function spinWords(string){

  let newString = ''; // added this here

  let splitString = string.split(" ");

  splitString.forEach(function(word, index) {
     if (word.length >= 5) {
        newString += word.split("").reverse().join("");  // added this here            
     } else if (word.length < 5) {
        newString += word;  // added this here
    }
    // add a space between characters, unless its the last char
    if(splitString.length > index + 1) {
        newString += ' ';  // added this here
    }
  });

  return newString;
}

console.log(spinWords("Jammerson is the best friend ever"));
...