我<input>
为中的项目名称列表设置了一个简单的搜索过滤器AngularJS
。
我的清单如下所示:
var uniqueLists = {
category1: ['item1', 'item2', 'item3' ... 'item180' ], // Real list contains ~180 items
category2: ['itemA', 'itemB', 'itemC' ... 'itemZZZ' ], // Real list contains ~1080 items
category3: ['otheritem1', 'otheritem2', 'otheritem3' ] // Real list contains 6 items
}
我在Angular中遍历此列表,并在<ul>
每个类别的a中打印出结果。
<div ng-repeat="(key,val) in uniqueLists">
<form ng-model="uniqueLists[index][0]">
<input ng-model="searchFilter" type="text" />
<ul>
<li ng-repeat="value in val | filter: searchFilter">
<label>
<input type="checkbox" ng-model="selectedData[key][value]" />
{{value}}
</label>
</li>
</ul>
</form>
</div>
为了清楚起见,selectedData看起来像这样:
var selectedData = {category1: [item1:true], category2: [], category3: []); // if 'item1's checkbox is checked.
尽管filter
即使在我速度相当快的计算机上,该列表也很笨拙,但此列表仍然可以正常工作。在输入中输入字母需要1-2秒才能更新列表。
我知道这很可能是因为我一次过滤了大约1000个项目,但是我在其他地方没有看到对此的任何讨论。
有什么办法可以使过滤器获得更好的性能?
筛选器方法的主要问题在于,每次更改dom都会对其进行操作,因此,筛选器的运行速度不是缓慢,而是后果。一种替代方法是使用类似:
ng-show="([item] | filter:searchFilter).length > 0"
在重复元素上。
通过@OverZealous提供一些代码,您可以使用以下内容比较行为:
更新 :Angular v1.2附带了track by
语法。这也有助于解决此类问题。如果元素具有一些唯一属性,则可以使用:
ng-repeat="item in items | filter:searchFilter track by item.id"
在item.id
所有项目中,哪里必须是唯一的。与track by
只有那些以DOM元素将被移除这已经不再是在最后的名单,其他人将被 铭记
。而没有track by
整个列表的每次都会 重绘 。简而言之:更少的dom操作=更快的重绘。
问题内容: 最近,我注意到声明包含64个元素的数组比声明具有65个元素的相同类型的数组要快得多(> 1000倍)。 这是我用来测试的代码: 这将运行在大约6毫秒,如果我更换用它需要大约7秒。如果作业分布在越来越多的线程中,那么这个问题就会成倍地恶化,这就是我的问题所在。 不同类型的数组(例如或)也会发生此问题。大字符串不会发生此问题:,但将其更改为时确实会发生 我想知道为什么会这样,是否有可能规避
问题内容: 我需要在数组中找到最常见的(模态)元素。 我能想到的最简单的方法是为每个唯一元素设置变量,并为每个元素分配一个计数变量,每次将其记录在遍历数组的for循环中时,该变量都会增加。 不幸的是,数组的大小是未知的,并且会很大,所以这种方法是没有用的。 我在Objective- C中遇到了类似的问题,该问题使用NSCountedSet方法对数组元素进行排名。不幸的是,我对编程非常陌生,只能将第
问题内容: 简介: 就我所能搜索到的而言,尚无此问题。 这是一个面试问题。 我什至没有专门寻找代码解决方案,任何算法/伪代码都可以使用。 问题: 给定一个整数数组及其大小,找到2个最小和的 非后续 元素(在数组中不能相邻)。另外,答案中不得包含第一个或最后一个元素(index 和)。解决方案还应该是 时间和空间的复杂性。 例如,当回答是,因为。 当答案为时,因为和不能选择的任何一个,因为处于数组的
问题内容: 我被困在以下程序中: 我有一个输入整数数组,其中只有一个非重复数,例如{1,1,3,2,3}。输出应显示非重复元素,即2。 到目前为止,我执行了以下操作: 最好限制阵列中的解决方案。避免使用集合,地图。 问题答案: 由于几乎可以肯定这是一种学习练习,并且由于您非常接近正确完成它,因此需要进行以下更改才能使其正常工作: 将声明 __移到 外部循环 内部 -需要将标志设置为外部循环的每次迭
我在中有一个带有几个元素的,我正在做的是迭代并显示Array中与null不同的所有元素。 这是: 我的问题:是否可以在一行中迭代null以外的元素?
问题内容: 我有很多对象,我需要将它们分成两个组成一组,以供UI助手使用。 例: 通过这四个数组成为一个数组 有很多分割数组的方法。但是,如果阵列很大,什么是最有效的(成本最低)。 问题答案: 如果您正在寻找效率,则可以使用一种方法来懒散地生成每个包含2个元素的数组,因此您一次只能在内存中存储2个元素: 此方法适用于任何Array,而不仅限于Arrays。 对于Swift 1,没有协议扩展,您将拥