【问题标题】:How to assign a character in a string to a value in an object? [duplicate]如何将字符串中的字符分配给对象中的值? [复制]
【发布时间】:2019-09-27 14:47:55
【问题描述】:

我需要循环遍历字符串并用互补值替换它们。这是我目前所拥有的:

function DNAStrand(dna){
    const charMatrix = {
        A: "T",
        T: "A",
        C: "G",
        G: "C"
    }

    let i = 0;
    let length = dna.length;

    for (i; i < length; i++) {
        const currentChar = dna[i].toUpperCase();

        if (charMatrix[currentChar]) {
            dna[i] = charMatrix[currentChar];
        }
    }

    return dna;
}

问题是它输入了if,但是它似乎并没有改变字符的值。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    字符串是不可变的。这就是为什么严格模式通常更可取的原因之一 - 错误将是明确的,而不是静默失败:

    'use strict';
    function DNAStrand(dna){
        const charMatrix = {
            A: "T",
            T: "A",
            C: "G",
            G: "C"
        }
    
        let i = 0;
        let length = dna.length;
    
        for (i; i < length; i++) {
            const currentChar = dna[i].toUpperCase();
    
            if (charMatrix[currentChar]) {
                dna[i] = charMatrix[currentChar];
            }
        }
    
        return dna;
    }
    DNAStrand('AGGCT');

    改为附加到一个新字符串,使用+=:

    'use strict';
    function DNAStrand(dna){
        const charMatrix = {
            A: "T",
            T: "A",
            C: "G",
            G: "C"
        }
    
        let i = 0;
        let length = dna.length;
        let newStr = '';
        for (i; i < length; i++) {
            const currentChar = dna[i].toUpperCase();
            newStr += charMatrix[currentChar] || currentChar;
        }
    
        return newStr;
    }
    console.log(DNAStrand('AGGCT'));

    或者将.replace与一个在对象上查找属性的回调函数一起使用:

    'use strict';
    function DNAStrand(dna){
        const charMatrix = {
            A: "T",
            T: "A",
            C: "G",
            G: "C"
        };
        return dna.replace(/[ATCG]/g, char => charMatrix[char]);
    }
    console.log(DNAStrand('AGGCT'));

    【讨论】:

      【解决方案2】:

      您也可以采取不同的方法:

      function DNAStrand(dna){
          const charMatrix = {
              A: "T",
              T: "A",
              C: "G",
              G: "C"
          };
      
          return dna.split("")
             .map(c => charMatrix[c])
             .join("");
      }
      
      console.log(DNAStrand("GATAGCACG"))

      splits将字符串转换成单独的字符,
      Maps将字符转换成它们的配对值,
      然后joins 再次将字符串重新组合在一起。

      【讨论】:

        【解决方案3】:

        您可以使用Array.from 迭代字符并映射新字符。

        function DNAStrand(dna){
            const charMatrix = { A: "T", T: "A", C: "G", G: "C" };
            return Array.from(dna, c => charMatrix[c.toUpperCase()] || c).join('');
        }
        
        console.log(DNAStrand('gataca'));

        【讨论】:

          猜你喜欢
          • 2015-12-24
          • 1970-01-01
          • 1970-01-01
          • 2021-07-01
          • 2019-03-29
          • 1970-01-01
          • 1970-01-01
          • 2016-03-10
          • 2022-01-26
          相关资源
          最近更新 更多