0

在 Linq 我可以写

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

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

请不要循环。

谢谢

格言

4

3 回答 3

1

使用Underscore.js,是的。

var ids = _.filter(entities, function(e) { return e.ID });

事实上,C# 最近在 LINQ 中采用的匿名函数(又名 lambda 表达式)的使用是大多数情况下 JavaScript 使用方式的核心。

下划线也有一个特殊情况:

var ids = _.pluck(entities, "ID");
于 2013-06-21T10:45:18.087 回答
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;} );
于 2013-06-21T10:50:06.587 回答
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;});
于 2013-06-21T10:59:51.230 回答