请记住,这个问题可能看起来很重复,但以前没有问过。
我应该使用什么来修改以下功能,使其仅在保留当前位置(无论是切片还是其他)的同时反转字符串中的每个第三个单词?
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
答案 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"));