How to remove a piece of an observableArray inside a loop with knockout?
我在名为
1 2 3 4 5 6 7 | self.deleteSelected = function() { for (var i = 0; i < self.emails().length; i++) { if (self.emails()[i].selected() == true) { ** what would go here ** } } } |
我在那里的循环完全可以实现我的期望,因为我将其与其他函数一起使用,但是我似乎无法获得正确的函数来从observableArray中删除索引。如果尝试使用
有什么想法我需要添加到该函数中以使其在循环遍历时删除数组中的相应索引吗?
我猜您在从要遍历的数组中删除元素时遇到了麻烦。作为一种替代方法,为什么不使用要保留的项目构建新的数组?
遵循这些原则的方法应该起作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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); } |
顺便说一句,从性能的angular来看,用一个操作替换
请注意,在我的代码中还有两个其他小的性能改进:
-
我将可观察对象缓存在变量中,而不是每次都检索它们
-
我将数组
length 存储在变量中,而不是在每个for循环中访问该属性。