在Linq,我可以写
var ids = entities.Select(e=>e.ID);
是否可以在一行中用相同的清晰度写入Javascript?
请不要循环。
由于
马克西姆
答案 0 :(得分:1)
使用Underscore.js,是的。
var ids = _.filter(entities, function(e) { return e.ID });
事实上,最近C#采用的匿名函数(aka lambda expressoins)在大多数情况下都是使用JavaScript的核心。
下划线也有一个特例:
var ids = _.pluck(entities, "ID");
答案 1 :(得分:1)
您可以将此方法定义为:
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;} );
答案 2 :(得分:1)
如果您使用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;});