你会做这类事吗?
var getBoard1 = function(id) {
return $.grep(me.boards, function (board) {
return board.Id == id;
});
};
或者这类事情?
var getBoard2 = function(id) {
for (var i = 0; i < me.boards.length; i++) {
var board = me.boards[i];
if (board.Id == id)
return board;
}
return null;
};
为什么在正确性,可读性和性能方面你更喜欢这种方式?如果您希望以第三种方式进行,请分享。
答案 0 :(得分:3)
这就是grep
函数的样子(jQuery v1.8.2):
grep: function( elems, callback, inv ) {
var retVal,
ret = [],
i = 0,
length = elems.length;
inv = !!inv;
// Go through the array, only saving the items
// that pass the validator function
for ( ; i < length; i++ ) {
retVal = !!callback( elems[ i ], i );
if ( inv !== retVal ) {
ret.push( elems[ i ] );
}
}
return ret;
}
基本上,你正在做同样的事情,因此在性能方面没有太大区别。当我查看jQuery代码时,它们总是返回一个数组,返回null
。如果您已经使用了jQuery,我会选择jQuery版本,因为它更易读,否则请使用 native 代码。
* - 编辑 - *
在查看代码时,这让我意识到 会有所作为。当代码找到第一个项目(只需要一个结果)时,你的代码已经返回(并完成循环),其中jQuery循环遍历 all 项目。因此,如果您只期望一个结果,那么您的版本会更快。
答案 1 :(得分:2)
jQuery提供了方便的方法,在后台它可能会做类似的事情。如果您已经在使用jQuery,那么您可以利用这一点,但我不会仅仅为这样的一点代码包含jQuery。这完全取决于你的情况。
至于表现,请尝试一下,看看你的结果是什么。
答案 2 :(得分:1)
如果你已经依赖于jQuery,那么首先要做它,因为它更短,阅读更容易。在非常不可能的情况下,这个功能是你的瓶颈,性能是不可接受的,那么你可以开始考虑其他实现。
如果您还没有依赖jQuery,那么第二个版本更可取,因为权衡(包括jQuery与编写更多代码行)并不值得。
答案 3 :(得分:0)
我会使用原生的Array.filter()
,如果你不关心Browsersupport(IE8-会死在这上面),这可能是最快的。
a.filter(function(e){return e.id == id});
返回,就像jQuerys grep一样,你必须获取第一个值。