在Javascript中使用Linq样式的select语句

时间:2013-06-21 10:43:04

标签: javascript linq

在Linq,我可以写

var ids = entities.Select(e=>e.ID);

是否可以在一行中用相同的清晰度写入Javascript?

请不要循环。

由于

马克西姆

3 个答案:

答案 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;});