如何反转字符串中的单词

作者: 前端辉羽 | 来源:发表于2020-01-17 12:38 被阅读0次

    反转字符串中的单词

    给定一个字符串,反转字符串中的每个单词的字符顺序,同时保留空格和单词的初始顺序。
    示例:
    输入:“Let's take LeetCode contest”
    输出:"s'teL ekat edoCteeL tsetnoc"
    注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格

    版本1:

    export default (str) => {
      // 字符串按空格进行分隔,保存数组,数组的元素的先后顺序就是单词的顺序
      let arr = str.split(' ')
      // 对数组进行遍历,然后每个元素进行反转
      let result = arr.map(item => {
      // 下面一行的split和join的参数都是没有空格的
        return item.split('').reverse().join('')
      })
      return result.join(' ')
    }
    

    书写测试代码

    import revertByWorld from '../../code/string/lesson1'
    
    // 用test声明测试用例,然后expect是期望执行的函数并传参,toBe是期望获得的结果
    test('revertByWorld:Let\'s take LeetCode contest', () => {
      expect(revertByWorld("Let's take LeetCode contest")).toBe("s'teL ekat edoCteeL tsetnoc")
    })
    

    运行指令npm test运行代码
    如果测试不通过,也就是执行了expect的代码,并没有获得toBe的结果,命令行工具会报错,并会通过Expected和Received信息明确提示报错的原因,根据原因 ,就可以很轻松的对错误进行修改。

    版本1的代码虽然看上去逻辑清晰,且运行正常,但是不够优雅,接下来对版本1的代码进行优化
    下面是减少了变量的声明,充分体现链式编程思想的版本2

    export default (str) => {
      // 1. 字符串按空格进行分隔,保存数组,数组的元素的先后顺序就是单词的顺序
      // 2. 对数组进行遍历,然后每个元素进行反转
      return str.split(' ').map(item => {
        return item.split('').reverse().join('')
      }).join(' ')
    }
    

    还有没有别的思路呢?
    split方法的参数可以是字符串常量,也可以是正则表达式,所以进行以下改变
    版本3

    export default (str) => {
      return str.split(/\s/g).map(item => {
        return item.split('').reverse().join('')
      }).join(' ')
    }
    

    还可以考虑在一开始的处理中,不适用split方法,而是用match
    JavaScript match() 方法
    match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
    该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。

    • 返回值
      存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
      无g只执行一次匹配,有g则返回所有匹配到的元素形成的数组。

    版本4

    export default (str) => {
      return str.match(/[\w']+/g).map(item => {
        return item.split('').reverse().join('')
      }).join(' ')
    }
    

    相关文章

      网友评论

        本文标题:如何反转字符串中的单词

        本文链接:https://www.haomeiwen.com/subject/xzrczctx.html