修改功能以仅反转第三个单词

时间:2018-11-19 11:03:57

标签: javascript string ecmascript-6

请记住,这个问题可能看起来很重复,但以前没有问过。

我应该使用什么来修改以下功能,使其仅在保留当前位置(无论是切片还是其他)的同时反转字符串中的每个第三个单词?

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 :(得分:3)

您还可以像下面那样使用“ Array.map”

说明-我们需要找出每三个元素,这意味着如果我们有一些数字表示遍历数组时我所处的位置,那么我们可以检查该位置的3倍,如果为0,则表示其第三,第六,第九个元素

现在要找到余数,我们有O(n)运算符,并且可以帮助我们弄清楚我们位于哪个元素位置的数字是O(log n) == O(n log n)%函数中的第二个参数,但是我们必须在index中加1,因为Javascript索引以0而不是1开头

因此,查找每三个元素的逻辑变为map

index

答案 1 :(得分:2)

只需在地图函数中添加索引 i ,然后检查是否要创建索引(从0开始)

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

答案 2 :(得分:0)

一种选择是使用正则表达式-捕获一组中的前两个单词及其空格,然后捕获另一组中的第三个单词,并返回与第二组相反的串联的第一组:

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

console.log(reverseStringWords("london glasgow manchester edinburgh oxford liverpool"));