使用下划线缩短具有属性数组的数组的性能

时间:2014-12-23 09:34:40

标签: underscore.js

同样的问题:
你有一系列属性
你想缩短长数组以获得与这些属性匹配的条目。

我在这里看到两个解决方案(mapfilter)。

1.   _.map(     ... function () { .findWhere  } );
2.   _.filter ( ... function () { .contains   } );

我将两者放入[Demo]

迭代次数的比较是确定的,但运行得更快?

1 个答案:

答案 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