根据用户输入切换函数中的变量

问题描述 投票:0回答:1

我正在尝试比较两个有摆动的 DNA 序列并报告不匹配情况。为了从编程意义上解释 DNA 和摆动,它们是字符串(碱基)A、T、C 和 G,摆动是分配给多个碱基的字符,例如: R 是“A”或“G”。
这里 if() 条件中的 !N 对应于声明的数组 N。我每次都必须手动编辑它,将其更改为条件中的 !R、!Y 或 !K 等。

const R = ['A', 'G'];
const Y = ['C', 'T'];
const K = ['G', 'T'];
const N = ['A', 'G', 'C', 'T'];
const wob = ['R', 'Y', 'K', 'M', 'S', 'W', 'N']

let mismatchPositions = [];
for (let i = 0; i < referenceLength; i++) {
  if (!N.includes(seq.sequence[i]) && wob.includes(referenceSeq[i]) &&
    referenceSeq[i] !== seq.sequence[i]) {
    const mismatch = `(${i+1} ${referenceSeq[i]} > ${seq.sequence[i]})`;
    mismatchPositions.push(mismatch);
  } else if (!wob.includes(referenceSeq[i]) && referenceSeq[i] !== seq.sequence[i]) {
    const mismatch = `(${i+1} ${referenceSeq[i]} > ${seq.sequence[i]})`;
    mismatchPositions.push(mismatch);
  }

我尝试使用 flat() 将所有数组放入一个变量中,但它失去了其功能,因为少数摆动中有相同的基数。有没有办法单独将 if() 条件下的数组从 !N 切换到 !R 等等。我希望它作为用户输入变量。

示例:参考序列:

GTAAGTTGNACG

输出:

GTAAGTTGAATG -(11 C > T Mismatch)
GTAAGTTAAACG -(8 G > A Mismatch)

对于 N 处的不匹配,由于

if()
条件,它没有显示任何不匹配。如果 ref-seq 有 Y 或 K 而不是 N,则会在第 9 个位置显示不匹配。

javascript arrays user-input dna-sequence
1个回答
0
投票

您可以声明一个包含 RYKN 数组的对象:

const rykn  = {
  R: ['A', 'G'],
  Y: ['C', 'T'],
  K: ['G', 'T'],
  N: ['A', 'G', 'C', 'T']
};

只要你有一些包含要使用的“R”,“Y”,“K”,“N”的字符串变量,你就可以修改你的if:

if (!N.includes(seq.sequence[i] && ...)

let choice = "R"; // or use a value from a drop down, etc
if (!rykn[choice].includes(seq.sequence[i] && ...)
© www.soinside.com 2019 - 2024. All rights reserved.