返回一个字符串,其中字符串中的每个元素[0]被元素[1]交换

时间:2019-03-09 23:42:50

标签: javascript

我想用元素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));

3 个答案:

答案 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(' '))

相关问题