Linq for JavaScript vs标准方法

时间:2012-02-24 01:52:49

标签: javascript linq web-standards

我是软件开发团队的架构师。我使用ASP.NET和JavaScript / jQuery为我们构建了一个相当大的Web控件和工具。

该工具包的一部分功能相当于.NET的IEnumerable LINQ方法(在哪里,选择等)用于JavaScript数组。我很惊讶这些使用js原型功能实现的简单程度。我希望我们的开发人员能够在客户端无缝地利用他们对LINQ的知识,到目前为止结果非常好。

正如我今天发现的那样,只有一个障碍:已经有一些功能相同的方法,如JavaScript 1.6。它们分别对应于LINQ的where,select,any和all方法的filter,map,some和every。

IE8或更早版本不支持它们(这可能解释了为什么我没有听说过它们),但提供一个实现以便它们跨浏览器工作是微不足道的。请注意,有许多LINQ方法没有本机等效方法,例如sum,max,avg,groupBy等。

我的问题是:我的开发团队应如何解决这种差异?我想我们有三种选择:

1 - 忽略本机JavaScript方法(或在传递方法中内部使用它们)并仅使用LINQ方法。禁止使用本机方法,以便我们的代码库是自洽的。

2 - 在适用时使用本机JavaScript方法,在没有等效项时使用LINQ方法。

3 - 允许使用。

我认为大多数社区都会支持选项2,因为它可以说更符合标准,但我觉得开发人员必须知道某些功能在JavaScript中是相同的,而其他人有一个不同的,任意的名字。它确实提升了我们迄今为止所实现的跨平台一致性。

您会选择哪一个,为什么?还有其他我不考虑的选择吗?

Bonus问题:jQuery既没有本机函数也没有LINQ函数。我的jQuery扩展应该使用哪些方法名称?

2 个答案:

答案 0 :(得分:1)

我会选择你提供的三个中的#1,因为我重视一致性,但也因为如果方法本身不可用,它允许你提供后备。

这也与Underscore.js对其某些方法的作用相似 - 如果可用则使用本机实现,否则将采用其后备实现。

答案 1 :(得分:0)

您可以尝试实现所有C#LINQ方法并保留其语法的manipula软件包: https://github.com/litichevskiydv/manipula

https://www.npmjs.com/package/manipula