Jquery实现对Array数组实现类似Linq的Lambda表达式的Where方法筛选
平时使用Linq,习惯了Lambda表达式,用着非常顺手,奈何在Jquery里面不能这样用,只能循环一个个判断。
趁空闲时间找了找,自己写了这样的扩展方法。
目前写出了三种方案,没有比较性能,觉得都可以用,先贴出来。
方案1(使用$.each):
Array.prototype.where = function (callback) { if (typeof this == "object" && this.constructor == Array) { var newArr = []; $.each(this, function (i, item) { if (callback) { if (callback(item) == true) { newArr.push(item); } } }) return newArr; } else { return null; } };
方案2(使用$.map):
Array.prototype.where = function (callback) { if (typeof this == "object" && this.constructor == Array) { return $.map(this, function (c) { if (callback) { if (callback(c) == true) { return c; } } return null; }) } else { return null; } };
方案3(使用$.grep):
Array.prototype.where = function (callback) { if (typeof this == "object" && this.constructor == Array) { return $.grep(this, callback); } else { return null; } };
调用方法:
var oldArr = []; oldArr.push({ name: 'aa', word: '11' }); oldArr.push({ name: 'bb', word: '22' }); var newArr = oldArr.where(c => c.name == 'aa');
var newArr = oldArr.where(c => c.name == 'aa');
当然,其实jquery本身也有类似的方法可以用:
方案4(使用filter()方法):
var newArr = oldArr.filter(c => c.name == 'aa');
但是各种写法的性能未知,以后有情况再补了。
浙公网安备 33010602011771号