如何解决使用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"));
工作原理:
我们在每个空格上拆分字符串,创建一个单词数组。 我们映射数组:
如果单词仅由单个字母/字符组成,则不需要反转。
如果大于一个字符,我们将spread the array literal,
因此我们将创建另一个(嵌套)数组,我们将反转第一个和最后一个字母。在返回这个(嵌套)数组之前,我们再次加入它(删除 ,
),并从中返回一个字符串,而不是一个(嵌套)数组。
最后,我们留下了一个包含单词的数组(倒置的第一个和最后一个字母),我们将再次合并它,重新创建我们在函数第一行分割时使用的相同空间。
>这是最好的方法(最高效的方法)吗? 可能不是。但它可能会教很多很酷的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。