Jquery实现对Array数组实现类似Linq的Lambda表达式的
Where⽅法筛选
平时使⽤Linq,习惯了Lambda表达式,⽤着⾮常顺⼿,奈何在Jquery⾥⾯不能这样⽤,只能循环⼀个个判断。
趁空闲时间了,⾃⼰写了这样的扩展⽅法。
⽬前写出了三种⽅案,没有⽐较性能,觉得都可以⽤,先贴出来。
⽅案1(使⽤$.each):
Array.prototype.where = function (callback) {
if (typeof this == "object" && structor == Array) {
var newArr = [];
$.each(this, function (i, item) {
if (callback) {
if (callback(item) == true) {
newArr.push(item);
}
}
})
return newArr;
}
else {
return null;
}
};
⽅案2(使⽤$.map):typeof array
Array.prototype.where = function (callback) {
if (typeof this == "object" && structor == 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" && structor == 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');但是各种写法的性能未知,以后有情况再补了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论