【问题标题】:Linq for JavaScript vs standard methods用于 JavaScript 的 Linq 与标准方法
【发布时间】:2012-02-24 01:52:49
【问题描述】:

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

该工具包的一部分功能等效于 .NET 的 JavaScript 数组的 IEnumerable LINQ 方法(where、select 等)。我很惊讶使用 js 原型特性来实现这些是多么简单。我希望我们的开发人员可以在客户端无缝地利用他们对 LINQ 的了解,并且到目前为止效果很好。

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

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

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

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

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

3 - 允许使用任何一个。

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

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

额外问题:jQuery 既没有原生函数也没有 LINQ 函数。我的 jQuery 扩展应该使用什么方法名?

【问题讨论】:

    标签: javascript linq web-standards


    【解决方案1】:

    我会在您提供的三个中选择第一个,因为我重视一致性,还因为如果该方法本身不可用,它允许您提供后备。

    这也类似于 Underscore.js 对其某些方法所做的 --- 如果可用,则使用本机实现,否则采用其后备实现。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-09-07
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 2019-11-22
        • 1970-01-01
        • 1970-01-01
        • 2015-01-23
        • 2012-03-09
        相关资源
        最近更新 更多