使用 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功能。
这是最好的方法(性能最高的方法)吗?
可能不会。但它可能会教很多很酷的东西。
给定一串由空格分隔的单词,编写一个函数来交换每个单词的第一个和最后一个字母。您可以假设每个单词至少包含一个字母,并且该字符串将始终包含至少一个单词。您还可以假设每个字符串只包含单词和空格,并且没有前导、尾随或重复的空格。
这是我目前所拥有的
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功能。
这是最好的方法(性能最高的方法)吗? 可能不会。但它可能会教很多很酷的东西。