我想用元素0
交换元素1
,以便元素1
成为0
idx,元素0
成为1
idx。 br />
例如Hello guys
变成eHllo ugys
我的代码有点乏味,它返回类似eHll ougys
的内容,它将一个单词的最后一个字母移动到下一个单词的第一个字母。
有没有办法没有forloop的方法?
const tex = `Hello guys`;
const swap = str => {
let swapped = [];
strin = str.split('');
for (let i = 0; i < strin.length; i++) {
if (i < strin.length) {
swapped[i] = strin[i + 1];
swapped[i + 1] = strin[i];
i += 1;
} else {
swapped[i] = strin[i];
}
}
return swapped.join('');
}
console.log(swap(tex));
答案 0 :(得分:2)
一种选择是使用正则表达式-在一个单词的开头捕获一个单词字符,然后捕获另一个捕获的单词字符,并替换为那些交换的捕获组:
const tex = `Hello guys`;
const Swap = str => str.replace(/\b(\w)(\w)/g, '$2$1');
console.log(Swap(tex));
答案 1 :(得分:2)
此替代方法按空格分隔字符串。
然后,函数map
使用数组将字符串转换为所需的输出。
let swap = s =>
s.split(/\s/).map(s => {
let split = s.split(''),
letters = [];
if (split.length > 1) { // This is for string with only one char
// Get the two chars -> He
// reverse them -> eH
letters = split.splice(0, 2).reverse();
}
return letters.join('') + split.join('');
}).join(' ');
console.log(swap("Hello guys"));
console.log(swap("Ele From S"));
答案 2 :(得分:1)
您也可以使用split and join(不使用任何正则表达式)来做到这一点:
const tex = `Hello guys`;
const strs = tex.split(' ')
const changed = strs.map(str => {
const s = str.split('')
const s1 = s[1]
const s0 = s[0]
s[0] = s1
s[1] = s0
return s.join('')
})
console.log(changed.join(' '))