JavaScript에 C #과 유사한 람다 구문이 있습니까?
C #과 같이 람다 구문을 지원하는 JavaScript 용 프레임 워크 또는 포스트 프로세서가 있습니까?
CoffeeScript의 함수 정의는 람다처럼 보이지만 철저히 조사하지는 않았습니다.
누구든지 JavaScript에서 람다 구문을 사용할 수 있습니까?
유사한 구문을 가진 Lambda 함수 는 "화살표 함수"로 알려진 ECMAscript 6에 포함되어 있습니다. 예 :
["duck", "cat", "goat"].filter(el => el.length > 3);
보고 ["duck", "goat"]
현재 Firefox 및 Chrome 의 최신 버전에서 지원됩니다 .
이전 브라우저를 대상으로하는 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- 람다
예를 들어 C #에서 :
coll.TakeWhile(x => x.index < 3);
다음과 같이 보입니다.
$(coll).TakeWhile("x => x.index < 3");
Javascript에는 함수로 필요한 곳에 람다를 만들 수있는 매우 멋진 익명 함수가 있지만 구현에는 몇 가지 단어와 범위 생성이 반복됩니다.
function(name){
return "Hello, " + name;
}
EcmaScript 2015 덕분에 람다 표현은 이제 Arrow Function 과 같은 간단한 구문으로 javaScript에서 사용할 수 있습니다.
(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 저장소를 만들었습니다 : https://github.com/sevensc/linqscript
정확한 Matthew Mcveigh !!
저도 기여하고 싶습니다.이 예제를보세요
"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/
참고 URL : https://stackoverflow.com/questions/7190439/is-there-ac-like-lambda-syntax-in-javascript
'Nice programing' 카테고리의 다른 글
Vim에서 220 번째 열을 지나면 마우스가 작동하지 않는 이유는 무엇입니까? (0) | 2020.12.01 |
---|---|
Java에서 e.printStackTrace () 사용 (0) | 2020.12.01 |
Psql 출력에서 결과 집합 장식을 숨기는 방법 (0) | 2020.12.01 |
xUnit.net의 모든 테스트 전후에 한 번 코드 실행 (0) | 2020.12.01 |
빈 행렬 곱셈을 통해 배열을 초기화하는 더 빠른 방법? (0) | 2020.12.01 |