どうすれば改善し、コードブロックを短縮することができますか?

CocoFlade:

この機能は、「GTCA」としてDNAの文字列を受け取り、正しく一致した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;
}

正解です。しかし、私はそれを書くの短い、簡単な方法を見つけようとしています。私が使用してすべきかとのCAN誰の助けを私に?

Maheerアリ:

下記の手順に従ってにあなたのコードを向上させることができます。

  • 複数ある場合は文と、すべてが同じ構造を持っている場合は、おそらくオブジェクトを使用する必要があります
  • あなたは、大文字と小文字の両方をチェックする必要があります。ただ、使用しtoLowerCase()た入力に。
  • あなたのことができsplit、文字列とmap()、むしろ配列作成するよりも、それpush()それに値を。

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

}

文字列は、特定の文字、他のものが含まれていることができれば、あなたはする必要が後の値filter()undefinedmap

return dna.split('').map(x => obj[x.toLowerCase()]).filter(x => x !== undefined)

別のより良い私たちはそれをループする前に文字列から不要な文字を削除することができますことをコメントで@RobGで言及されています。

return dna
        .toLowerCase()
        .replace(/[^cgta]/g,'')
        .split('')
        .map(x => obj[x])

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=7502&siteId=1