我正在尝试比较两个有摆动的 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 个位置显示不匹配。
您可以声明一个包含 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] && ...)