【问题标题】:Refactor vue method重构vue方法
【发布时间】:2020-12-14 15:16:03
【问题描述】:

有人能告诉我如何重构这个方法,或者告诉我应该改变什么吗? 这个想法是创建一个函数来更改作者的名字,因为我总是收到大写的名字,我只需要第一个字母并排除(名字是西班牙语)“de”、“el”、“la”以及有时也使用的“'”、“-”。

  methods: {
    nameAuthor (v) {
      const author = v.toLowerCase().split(' ')
      const exceptions = ["'", '-', 'y', 'de', 'la']
      const longitud = exceptions.length
      for (let i = 0; i < author.length; i++) {
        for (let u = 0; u < longitud; u++) {
          if (!exceptions.includes(author[i])) {
            author[i] = author[i].charAt(0).toUpperCase() + author[i].substring(1)
          }
        }
        if (author[i].includes(exceptions[0])) {
          const especialCharacter = author[i].split("'")
          author[i] = especialCharacter[0] + "'" + especialCharacter[1].charAt(0).toUpperCase() + especialCharacter[1].substring(1)
        }
        if (author[i].includes(exceptions[1])) {
          const especialCharacter = author[i].split('-')
          author[i] = especialCharacter[0] + '-' + especialCharacter[1].charAt(0).toUpperCase() + especialCharacter[1].substring(1)
        }
      }
      return author.join(' ')
    }
  }

提前致谢。

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    我会把它分成三个子问题。

    1. 将每个“单词”的首字母大写。
    2. 小写名称的特殊部分

    第一个问题回答here,给你如下功能:

    function capitalizeFirstLetter(string) {
      return string.charAt(0).toUpperCase() + string.slice(1);
    }
    
    function capitalizeEachWord(phrase) {
       return phrase.split("'").map(capitalizeFirstLetter).join("'")
                    .split("-").map(capitalizeFirstLetter).join("-")
                    .split(" ").map(capitalizeFirstLetter).join(" ");
    
    }
    

    现在可以使用以下函数解决第二个问题(假设名称的特殊部分前后总是有空格):

    function lowerCaseSpecialNameParts (name) {
       return name.replace(" De ", " de ")
                  .replace(" La ", " la ")
                  .replace(" El ", " el ");
    
    }
    

    现在你可以在你的函数中结合它们:

    methods: {
        nameAuthor (v) {
          return lowerCaseSpecialNameParts(capitalizeEachWord(v.toLowerCase()));
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 2017-08-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2017-09-04
      • 2020-10-09
      • 1970-01-01
      相关资源
      最近更新 更多