【发布时间】:2017-07-31 01:20:34
【问题描述】:
所以,我有这个函数,它在更新后从表中删除元素。这个函数,我们称之为 foo(),接受一个参数。
foo(obj);
此对象 obj 在称为 Array 类型的消息中具有一个子字段。所以,它会看起来像这样:
obj.messages = [...];
此外,在 obj.messages 内部,每个元素都包含一个对象,该对象具有另一个名为 id 的子字段。所以,这看起来像:
obj.messages = [{to:"You",from:"Me",id:"QWERTY12345.v1"}, ...];
现在,除了参数之外,我还有一个活动表也被函数 foo 引用。它使用我称为 oTable 的 dataTable 元素。然后我抓取 oTable 的行并将它们复制到一个名为 theCurrentTable 的数组中。
var theCurrentTable = oTable.$('tr').slice(0);
现在,棘手的地方在于,当我查看 Array theCurrentTable 时,返回的值如下所示。
theCurrentTable = ["tr#messagesTable-item-QWERTY12345_v1", ...];
下面的循环显示了我如何尝试显示问题。虽然它可以工作(看起来),但函数本身可以有超过 1000 条消息,这是一个非常昂贵的函数。它所做的只是检查当前显示的表格是否具有参数中给定的元素,如果不是特定元素,则将其删除。我怎样才能更好地编写这个函数?
var theCurrentTable = oTable.$('tr').slice(0);
var theReceivedMessages = obj.messages.slice(0);
for(var idx = 0; idx < theCurrentTable.length; idx++){ // through display
var displayID = theCurrentTable[idx].id.replace('messagesTable-item-','').replace('_','.');
var deletionPending = true;
for(var x = 0; x < theReceivedMessages.length; x++){
var messageID = theReceivedMessages[x].id;
if(diplayID == messageID){
console.log(displayID+' is safe...');
deletionPending = false;
}
}
if(deletionPending){
oTable.fnDeleteRow(idx);
}
}
【问题讨论】:
标签: javascript jquery arrays algorithm datatables