簡體   English   中英

JavaScript中是否有類似C#的lambda語法?

[英]Is there a C#-like lambda syntax in JavaScript?

是否有支持lambda語法的JavaScript框架或后期處理器,如C#?

CoffeeScript中的函數定義看起來像lambda,但我沒有仔細研究它們。

任何人都可以告訴我,我可以在JavaScript中使用lambda語法嗎?

ECMAscript 6中包含具有類似語法的Lambda函數,它們被稱為“箭頭函數”。 一個例子:

["duck", "cat", "goat"].filter(el => el.length > 3); 返回["duck", "goat"]

目前支持最新版本的FirefoxChrome

要在針對舊版瀏覽器的JavaScript中使用此語法,可以使用可將ES 6編譯為更廣泛支持的版本的工具 - 例如工具BabelTraceur

你可以使用typescript( www.typescriptlang.org/)

function (d, i) {
    return "translate(" + d.x + "," + d.y + ")";
}

會成為

(d, i) =>  "translate(" + d.x + "," + d.y + ")"  

還有更多很酷的東西,比如打字:......如果你是這樣的話

我開始為jQuery創建一個擴展器,它完全符合您的要求。 JS-LAMBDA

例如在C#中:

  coll.TakeWhile(x => x.index < 3);

好像:

 $(coll).TakeWhile("x => x.index < 3");

Javascript具有非常好的匿名函數,允許您在任何需要的地方創建lambdas作為函數,但實現帶有一些重復的單詞和范圍創建:

function(name){
     return "Hello, " + name;
}

感謝EcmaScript 2015,lambda expresion現在可用於javaScript,其語法更簡單,如Arrow Function

(name) => "Hello, " + name

FIDDLE: https ://jsfiddle.net/vktawbzg/

NPM: https //www.npmjs.com/package/linqscript

GITHUB: https //github.com/sevensc/linqscript

使用Typescript我創建了一個List<T>類,它擴展了Array<T>

用法:

var list = new List<ListView>();
...
var selected = list.Items.Where(x => x.Selected);

執行:

 export class List<T> extends Array<T> {

    public Where(callback: (value: T) => boolean, thisArg?: any): List<T> {
            try {
                const list = new List<T>();

                if (this.length <= 0)
                    return list;

                if (typeof callback !== "function")
                    throw new TypeError(callback + ' is not a function');

                for (let i = 0; i < this.length; i++) {
                    const c = this[i];
                    if (c === null)
                        continue;

                    if (callback.call(thisArg, c))
                        list.Add(c);
                }

                return list;
            }
            catch (ex) {
                return new List<T>();
            }
        }
...
}

編輯:我創建了一個github repo: https//github.com/sevensc/linqscript

確切的馬修麥克維!

我想貢獻也看到這個例子

 "use strict"; /* Lambda Helper to print */ function PrintLineForElement(element, index, array){ document.write("a[" + index + "] = " + JSON.stringify(element)+"<br>"); } /* function to print array */ function Print(a){ a.forEach(PrintLineForElement) document.write("<br>"); } /* user model */ class User{ constructor(_id,_name,_age,_job){ this.id = _id; this.name = _name; this.age = _age; this.job = _job; } } /* Provaider users */ class UserService{ constructor(){ } GetUsers(){ //fake ajax response let data = []; data.push(new User(1,"Juan",20,"AM")); data.push(new User(2,"Antonio",20,"AM")); data.push(new User(3,"Miguel Angel",30,"Developer")); data.push(new User(4,"Bea",26,"AM")); data.push(new User(5,"David",24,"Developer")); data.push(new User(6,"Angel",24,"Developer")); data.push(new User(7,"David",34,"TeamLead")); data.push(new User(8,"Robert",35,"TeamLead")); data.push(new User(9,"Carlos",35,"TeamLead")); return data; } } const userService = new UserService(); const users = userService.GetUsers(); //get user order by name document.write("All users </br>"); Print(users); //get user order by name document.write("Order users by name ASC : users.sort((a,b)=>{return a.name > b.name })</br>"); Print(users.sort((a,b)=>{return a.name > b.name; })); document.write("Order users by name DESC : users.sort((a,b)=>{return a.name < b.name })</br>"); Print(users.sort((a,b)=>{return a.name < b.name; })); //get user filter by age document.write("Only users oldest or equal than 25 : users.filter( (w) => {return w.age >= 25;} )</br>"); Print(users.filter( (w) => {return w.age >= 25;} )); document.write("Only users smallest or equal than 25 : users.filter( (w) => {return w.age <= 25;} )</br>"); Print(users.filter( (w) => {return w.age <= 25;} )); //GroupBY /** * custom group by with Array.prototype.keys **/ Array.prototype.groupBy = function(f) { let groups = []; this.forEach( function( o ) { let group = f(o) ; groups[group] = groups[group] || []; groups[group].push( o ); }); return Object.keys(groups).map( function( group ) { return groups[group]; }) } document.write("Group user by age </br>"); Print(users.groupBy( (w) => {return w.age } )); document.write("Group user by job </br>"); Print(users.groupBy( (w) => {return w.job } )); document.write("Group user by job</br>"); Print(users.groupBy( (g) => {return [g.job] } )); document.write("Group user by job and age then order by name </br>"); Print(users.sort((a,b)=>{return a.job > b.job}).groupBy( (g) => {return [g.job+g.age] } )); document.write("Group user by job and age then order by name and filter where age < 25 and job equal AM </br>"); Print(users.sort((a,b)=>{return a.job > b.job}).filter((w)=>{ return w.age<25 || w.job == "AM" }).groupBy( (g) => {return [g.job+g.age] } )); 

https://jsfiddle.net/angelfragap/0b5epjw3/29/

暫無
暫無

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

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