簡體   English   中英

在Javascript中模擬C#Lambda方法

[英]Simulate C# Lambda methods in Javascript

我想模擬C# Any()方法,該方法可用於確定集合是否具有基於lambda表達式的任何匹配對象。

我使用jQuery的$ .grep簡化操作:

Array.prototype.any = function (expr) {

    if (typeof jQuery === 'undefined')
        throw new ReferenceError('jQuery not loaded');

    return $.grep(this, function (x, i) {
        return eval(expr);
    }).length > 0;

};

var foo = [{ a: 1, b: 2 }, { a:1, b: 3 }];

console.log(foo.any('x.a === 1')); //true
console.log(foo.any('x.a === 2')); //false

我知道eval()是不好的做法,原因很明顯。 但是在這種情況下是否可以,因為我不會將此與任何與用戶輸入相關的內容使用?

這可以在沒有eval()情況下完成嗎? 我無法想出一種方法將表達式傳遞給函數而不進行評估。

http://jsfiddle.net/dgGvN/

我建議你好好看看JS閉包。 特別是,你在那里做的事情可以通過使用Array.some方法在JS中本地完成:

[{ a: 1, b: 2 }, { a:1, b: 3 }].some(function(x) { return x.a === 1; }); // true
[{ a: 1, b: 2 }, { a:1, b: 3 }].some(function(x) { return x.a === 2; }); // false

編輯:在這種情況下,我們並沒有真正使用閉包,而是簡單的簡單匿名函數...

通過功能:

Array.prototype.any = function (expr) {

    if (typeof jQuery === 'undefined')
        throw new ReferenceError('jQuery not loaded');

    return $.grep(this, expr).length > 0;

};

var foo = [{ a: 1, b: 2 }, { a:1, b: 3 }];

console.log(foo.any(function(x, i){return x.a === 1})); //true
console.log(foo.any(function(x, i){return x.a === 2})); //false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM