Изменить функцию, чтобы обратить только третье слово - PullRequest
0 голосов
/ 19 ноября 2018

Пожалуйста, имейте в виду, что этот вопрос может показаться дублирующим, но не задавался раньше

Что я должен использовать, чтобы изменить приведенную ниже функцию, чтобы она изменяла направление только на каждое третье слово в строке, оставаясь в его текущей позиции, будь то фрагмент или что-то еще?

function reverseStringWords (sentence) {
  return sentence.split(' ').map(function(word) {
    return word.split('').reverse().join('');
  }).join(' ');
}
console.log(reverseStringWords("london glasgow manchester edinburgh oxford liverpool"));

В настоящее время это nodnol wogsalg retsehcnam hgrubnide drofxo looprevil

Это должно быть london glasgow retsehnam edinburgh oxford looprevil

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Одним из вариантов может быть использование регулярного выражения - захватить первые два слова и их пробелы в одной группе, затем захватить третье слово в другой группе и вернуть первую группу, объединенную с обращенной второй группой:

const reverseStringWords = str => str.replace(
  /((?:\w+ ){2})(\w+)/g,
  (_, twowords, thirdword) => twowords + [...thirdword].reverse().join('')
);

console.log(reverseStringWords("london glasgow manchester edinburgh oxford liverpool"));
0 голосов
/ 19 ноября 2018

Просто добавьте индекс i к вашей функции карты и проверьте, хотите ли вы (начиная с 0)

function reverseStringWords (sentence) {
  return sentence.split(' ').map(function(word,i) {
    return (i+1)%3==0  ? word.split('').reverse().join('') : word;
  }).join(' ');
}
0 голосов
/ 19 ноября 2018

Вы также можете использовать «Array.map», как показано ниже

Объяснение - Нам нужно выяснить каждый третий элемент, что означает, что если у нас есть какое-то число, представляющее, в какой позиции я нахожусь при обходе массива, то мы можем проверитьостаток на 3 этой позиции, и если он равен 0, это означает его третий, шестой, девятый ... элемент

Теперь, чтобы найти остаток, у нас есть оператор % и это некоторое число, которое поможет нам выяснить, какой элементПозиция, в которой мы находимся, - это index, второй аргумент в функции map, но нам нужно было бы добавить 1 к index, поскольку в Javascript индекс начинается с 0, а не 1

Итак, логика для поиска каждого третьегоэлемент становится (i + 1) % 3 == 0

function reverseStringWords (sentence) {
  return sentence.split(' ').map((d, i) => 
            (i+1) % 3 == 0 
              ? [...d].reverse().join('') 
              : d)
}

console.log(reverseStringWords("london glasgow manchester edinburgh oxford liverpool"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...