gpt4 book ai didi

javascript - 如何在带有 knockout 的循环中删除一 block observableArray?

转载 作者:行者123 更新时间:2023-11-30 00:23:09 24 4
gpt4 key购买 nike

我在名为 emails 的 observableArray 中有一个对象数组。数组中的每封电子邮件都有一个关联的复选框,用于一次选择多封邮件。为了将一个函数应用于多个项目,我遍历电子邮件以查看它们是否被选中,如果被选中则运行该函数:

self.deleteSelected = function() {
for (var i = 0; i < self.emails().length; i++) {
if (self.emails()[i].selected() == true) {
** what would go here **
}
}
}

我在那里的循环完全按照我想要的方式工作,因为我将它与其他函数一起使用,但我似乎无法获得从 observableArray 中删除索引的正确函数。如果尝试了 .remove().splice 但我无法让它们中的任何一个工作。

知道我需要向该函数添加什么以使其在循环时删除数组中的相应索引吗?

最佳答案

我猜你在从正在遍历的数组中删除元素时遇到了问题。作为替代方法,您为什么不使用要保留的项目构建一个新数组?

按照这些思路应该可以工作:

self.deleteSelected = function() {

var emails = self.emails(),
emailsLength = emails.length,
emailsToKeep = [];

for (var i = 0; i < emailsLength; i++) {
if (emails[i].selected() !== true) {
emailsToKeep.push(emails[i]);
}
}

self.emails(emailsToKeep);
}

顺便说一句,在一次操作中替换您的 observableArray 从性能的 Angular 来看也更好:每次您使用 splice()remove () 你会导致相关的 DOM 部分完全重建,这样只会发生一次。

请注意,在我的代码中还有另外两个小的性能改进:

  • 我将 observable 缓存在变量中,而不是每次都检索它们

  • 我将数组 length 存储在一个变量中,而不是在每个 for 循环中访问该属性。

关于javascript - 如何在带有 knockout 的循环中删除一 block observableArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426741/

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