我正在尝试解决 JavaScript 中的一个简单问题。我必须获取一串字符并进行以下替换:
G -> C
C -> G
T -> A
A -> U
例如,如果输入是 ATCG
,则输出将为 UAGC
最初我想将字符串转换为数组,然后对其使用map()
。但是,当工作可以在一次迭代中完成时,为什么要迭代字符串两次呢?
因此我寻找其他方法,例如 RegExp,但似乎进行多次替换的唯一方法是链接多个 replace()
,这确实会更加低效。
所以我想使用 for...of
并编写了以下代码:
let s = 'ATGC*';
let r = '';
for(const x of s) r += x === 'C' ? 'G' : 'G' ? 'C' : 'T' ? 'A' : 'A' ? 'U' : '-NaN-';
console.log(r);
它似乎将 C
转换为 G
,并将其他所有内容转换为 C
。
我认为它应该像这样工作:
x === // if the current character is equal to
'C' ? // `C`
'G' : // r += `G`
'G' ? // else if it is equal to `G`
'C' : // r += `C`
'T' ? // else if it is equal to `T`
'A' : // r += `A`
'A' ? // else if it is equal to `A`
'U' : // r += `U`
'-NaN-'; // else it is not a nucleotide
有人知道到底发生了什么吗?
最佳答案
如果您确实喜欢采用三元组,则可以在多个条件下采用此方法。
r += x === 'G'
? 'C'
: x === 'C'
? 'G'
: x === 'T'
? 'A'
: 'U'
更好的方法是使用一个对象来替换值。
nucleobases = { G: 'C', C: 'G', T: 'A', A: 'U' }
稍后替换
r += nucleobases[x];
关于javascript - 使用多个三元运算符替换字符串的多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66662073/