在 Linq 我可以写
var ids = entities.Select(e=>e.ID);
是否可以在一行中以同样的清晰度用 Javascript 编写?
请不要循环。
谢谢
格言
在 Linq 我可以写
var ids = entities.Select(e=>e.ID);
是否可以在一行中以同样的清晰度用 Javascript 编写?
请不要循环。
谢谢
格言
使用Underscore.js,是的。
var ids = _.filter(entities, function(e) { return e.ID });
事实上,C# 最近在 LINQ 中采用的匿名函数(又名 lambda 表达式)的使用是大多数情况下 JavaScript 使用方式的核心。
下划线也有一个特殊情况:
var ids = _.pluck(entities, "ID");
您可以将此方法定义为:
Array.prototype.select=function(selector) {
var result = [];
for(var i=0;i<this.length;i++) result.push(selector(this[i]));
return result;
}
然后在任何地方像这样使用它:
var ids = entities.select(function(e) {return e.ID;} );
JavaScript 1.7 现在支持生成器(因此,yield
关键字),因此您可以像生成器一样编写 select 方法,使其尽可能接近 .NET 版本。
Array.prototype.select=function(selector) {
for(var i=0;i<this.length;i++) yield selector(this[i]);
}
但我对生成器持怀疑态度。我还没有和他们一起玩过他们在 JS 中的表现。旧版浏览器不支持它们,因此请自行承担探索和使用的风险。
如果你想试试TypeScript,语法会更接近 .NET。像这样的东西:
ids:number[] = entities.select((e) => {return e.ID;} );
如果您使用的是 VS 开发工具,您可以使用JSLinq或者您可以简单地从示例中获取 .js 文件。
安装后你可以做类似的事情
var myList = [
{id:1,FirstName:"Chris",LastName:"Pearson"},
{id:2,FirstName:"Kate",LastName:"Johnson"},
{id:3,FirstName:"Josh",LastName:"Pearson"},
{id:4,FirstName:"John",LastName:"Pearson"},
{id:5,FirstName:"Steve",LastName:"Pearson"}
];
var ids = JSLINQ(myList)
.Where(function(item){ return item.LastName.match(/Pear.*/))})
.Select(function(item){return item.id;});