同样的问题:
你有一系列属性
你想缩短长数组以获得与这些属性匹配的条目。
1. _.map( ... function () { .findWhere } );
2. _.filter ( ... function () { .contains } );
我将两者放入[Demo]
迭代次数的比较是确定的,但运行得更快?
答案 0 :(得分:0)
答案已经存在于underscore.js文档中,但已隐藏。
<强>地图
_.map(list,iteratee,[context])别名:collect通过转换映射列表中的每个值来生成新的值数组 功能(iteratee)。如果list是JavaScript对象,则迭代 参数将是(值,键,列表)。
过滤强>
_。filter(list,predicate,[context])别名:选择查看列表中的每个值,返回通过a的所有值的数组 真相测试(谓词)。
<强>包含强>
_。contains(list,value)别名:include如果列表中存在该值,则返回true。如果list是一个数组,则在内部使用indexOf。
<强> findWhere 强>
_.findWhere(list,properties)查看列表并返回与列出的所有键值对匹配的第一个值 属性。
如果未找到匹配项,或者list为空,则返回undefined。
Map生成一个新数组。所以它需要在循环时为内存分配和引用工作背景,而filter将循环并返回那些项目通过真值测试的引用。 包含返回布尔值,而findwhere返回第一个匹配项。越来越多的背景工作。 性能不仅取决于循环的工作次数,还取决于完成的工作总量。 :)
请自行检查结果: jsperf