使用 javascript 交换字符串中每个单词的第一个和最后一个字母

swapping the first and last letters of every word in a string using javascript

给定一串由空格分隔的单词,编写一个函数来交换每个单词的第一个和最后一个字母。您可以假设每个单词至少包含一个字母,并且该字符串将始终包含至少一个单词。您还可以假设每个字符串只包含单词和空格,并且没有前导、尾随或重复的空格。

这是我目前所拥有的

function first_last(str1){
 if (str1.length <= 1) {
  return str1;
 }

  mid_char = str1.substring(1, str1.length - 1);
  return (str1.charAt(str1.length - 1)) + mid_char + str1.charAt(0);
 }
 console.log(first_last('Hello there')); //eello therH

首先将句子拆分成单词,然后交换第一个和最后一个字母

const str = "This is a hello world string";

const result = str.split(" ").map(word => {
  const len = word.length;
  if (len > 1) {
    word = word[len-1] +  word.substring(1, len-1) + word[0];
  }
  return word;
}).join(" ");

console.log(result)

将其分解为语句,供难以理解实施的人使用

const str = "This is a hello world string";

const arr = str.split(" ");

const swapWords = arr.map(word => {
  const len = word.length;
  if (len > 1) {
    word = word[len - 1] + word.substring(1, len - 1) + word[0];
  }
  return word;
});

const result = swapWords.join(" ");

console.log(result)

使用 ES6 的更有趣的示例:

const invertFirstWithLastLetter = string => string.split(" ").map(word => {
    if (word.length === 1) {
        return word;
    };
    word = [...word];
    [word[0], word[word.length - 1]] = [word[word.length - 1], word[0]];
    return word.join("").toString();
}).join(" ");

console.log(invertFirstWithLastLetter("ES6 is not a crime"));

工作原理:

我们在每个 space 上拆分字符串,创建一个单词数组。 我们映射数组:

如果这个词只由一个letter/char组成,我们不需要反转。

如果大于一个字符,我们将spread the array literal, 因此我们将创建另一个(嵌套的)数组,我们将反转第一个和最后一个字母。在 returning 这个(嵌套)数组之前,我们再次加入它(删除 ,)并且我们 return 从它中取出一个字符串而不是(嵌套)数组。

最后,我们留下了一个包含单词的数组(第一个和最后一个字母倒置),我们将再次合并,重新创建我们用于在第一行拆分的相同 space功能。

这是最好的方法(性能最高的方法)吗? 可能不会。但它可能会教很多很酷的东西。