javascript - 如何改进和缩短这段代码?

标签 javascript arrays for-loop

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.


2年前关闭。







Improve this question




此函数接受一串 DNA,例如“GTCA”,并返回一个包含正确匹配的 DNA 对的数组。

function pairDNA(dna) {

  const pairs = []

  for (let i = 0; i < dna.length; i ++) {

    if (dna[i] === "C" | dna[i] === "c") {
      pairs.push("CG");
    } else if (dna[i] === "G"| dna[i] === "g") {
      pairs.push("GC");
    } else if (dna[i] === "T"| dna[i] === "t") {
    pairs.push("TA");
    } else if (dna[i] === "A"| dna[i] === "a") {
      pairs.push("AT");
    }
  }

return pairs;
}

这是对的。但是,我正在尝试找到一种更短,更简单的编写方式。任何人都可以帮助我使用我应该使用的东西吗?

最佳答案

您可以通过以下步骤改进您的代码:

  • 当有多个 if 语句并且都具有相同的结构时,您可能需要使用一个对象
  • 您需要检查大写和小写。只需使用 toLowerCase()在输入。
  • 您可以split字符串和 map()它而不是创建一个数组 push()值(value)观融入其中。


  • function pairDNA(dna) {
      const obj = {
        c: 'CG',
        g: 'GC',
        t: 'TA',
        a: "AT"
      }
      return dna.split('').map(x => obj[x.toLowerCase()])
    
    }


    如果字符串可以包含任何其他特定字母,那么您需要 filter() undefined map 之后的值
    return dna.split('').map(x => obj[x.toLowerCase()]).filter(x => x !== undefined)
    

    @RobG 在评论中提到了另一个更好的方法,即我们可以在遍历字符串之前从字符串中删除不需要的字母。
    return dna
            .toLowerCase()
            .replace(/[^cgta]/g,'')
            .split('')
            .map(x => obj[x])
    

    关于javascript - 如何改进和缩短这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60169584/

    相关文章:

    javascript - 如何语法检查充满数学运算的字符串

    javascript - 在 css 注入(inject)上设置正确的目录

    php - 最佳实践 : How to Structure Arrays - Standards and Naming Conventions

    arrays - 在数组中找到加到给定总和的一对数字

    mysql - 在delphi 7上用数组检索多个记录值

    javascript - 创建带有标题部分的粘性标题

    javascript - 如何使用 ajax 和 spring MVC 填充模态表单

    javascript - 需要在 javascript 中显示来自数据库的数据

    php - 具有动态循环的表

    JavaScript 循环数组,将价格属性乘以 2