[英]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"]
要在針對舊版瀏覽器的JavaScript中使用此語法,可以使用可將ES 6編譯為更廣泛支持的版本的工具 - 例如工具Babel或Traceur 。
你可以使用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] } ));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.