我的问题很复杂,我将其分为两部分。首先,让我定义问题。第一步,将字母reverse complement
与A
互换,将T
与C
互换(反之亦然),形成DNA序列的G
,并随后颠倒拼写字母的序列。例如,ACCTGAG
的反向序列为GAGTCCA
(只需从末尾开始读取序列),而反向补码为CTCAGGT
(通过首先交换字母然后反转结果序列) 。已经给出了针对SQL Server中确切问题的解决方案here,但是我需要Javascript中的此功能。
我的问题的第二部分涉及将反向补码逻辑合并到DataTables中。更精确地说,我想动态检索DataTable的column [0]中所有值,这些数据的反向互补字符串等于其值本身(例如TGCGCA
是具有反向ACGCGT
和反向互补TGCGCA
的序列)再次)。因此,我不想在column [0]中搜索特定值,而是要获取满足上述条件的所有条目。我希望在单击复选框时发生这种情况;用户将不会输入任何内容。
下面的代码是我到目前为止尝试过的(但我认为它不在正确的轨道上:]
var table = $('#datatable').DataTable({
this.api().columns([0]).every(function () {
var column0 = this;
//this calculates just the reverse not the reverse complement
column0.data().each(function (d, j) {
rev = d.split("").reverse().join("")
column0
.search(rev)
.draw();
});
});
我相信最好的选择是custom filter:
function search(sequence) {
let revSeq = ''
for (let char of sequence) revSeq = char + revSeq
$.fn.dataTable.ext.search.push(function(settings, data) {
return revSeq === data[0]
})
table.draw()
$.fn.dataTable.ext.search.pop()
}
现在search('ACCTGAG')
将过滤掉所有具有序列GAGTCCA
的行。
<label><input type="checkbox" class="sequence" value="TGCGCA">TGCGCA</label>
<label><input type="checkbox" class="sequence" value="TTCGCA">TTCGCA</label>
依此类推。选中复选框时触发搜索:
$('.sequence').on('change', function() {
if (this.checked) search(this.value)
})