gpt4 book ai didi

javascript - 编写此函数以删除表中的行/对象的更快方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:40 24 4
gpt4 key购买 nike

所以,我有这个函数,在更新之后,从表中删除元素。这个函数,我们称之为 foo(),接受一个参数。

foo(obj);

此对象 obj 在称为数组类型的消息中有一个子字段。所以,它看起来像这样:

obj.messages = [...];

此外,在 obj.messages 内部,每个元素都包含一个对象,该对象具有另一个名为 id 的子字段。所以,这看起来像:

obj.messages = [{to:"You",from:"Me",id:"QWERTY12345.v1"}, ...];

现在,除了参数之外,我还有一个事件表,它也被函数 foo 引用。它使用我称为 oTable 的数据表元素。然后我抓取 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);
}
}

最佳答案

我想我明白你的问题了。你的<tr>元素有一个 id应该与您消息中的项目 ID 相匹配。

首先,您应该从 obj 中提取所需的消息 ID 值参数

var ids = obj.messages.map(function (m) { return '#messagesTable-item-' + m.id; });

这将为您提供需要保留的所有行 ID,然后将数组连接在一起以使用 jQuery 选择不需要的行并将其删除。

$('tr').not(ids.join(',')).remove();

注意:Array.prototype.map()仅 IE9 支持此功能,因此您可能需要使用 jQuery.map() .

关于javascript - 编写此函数以删除表中的行/对象的更快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com