Что представляет собой ведущая библиотека LINQ для JavaScript?

Я ищу библиотеку JavaScript, которая позволит мне запрашивать сложные объекты JSON с использованием синтаксиса типа LINQ. Быстрый поиск нашел несколько перспективных вариантов, которые выглядят, они могут предложить то, что мне нужно:

LINQ to JavaScript и jLinq p >

  • Есть ли у кого-нибудь опыт? используя их?
  • Каковы некоторые плюсы и минусы?
  • Соответствует ли производительность?
  • Поддерживает ли синтаксис функции LINQ to JavaScript предлагает любые скрытые преимущества (Я лично нахожу синтаксис jLinq более привлекателен в первую очередь взгляд)?
  • Что вам не хватает в любом проекте?
  • Вы когда-нибудь пытались связаться с авторами? Насколько они были отзывчивы?
  • Какой проект более широко используется?

EDIT:

Просто увидел это сегодня: jslinq.

Я думаю, что это будет первая попытка провести тщательную проверку.

Ответ 1

Вы уже видели Rx для Javascript? Это то, что вы хотите.

Ответ 2

Возможно, вы захотите проверить linq.js. Он следует синтаксису .NET lambda и выглядит хорошо интегрированным в среде Microsoft.

LINQ для JavaScript - http://linqjs.codeplex.com/

Доводы

  • Реализовывает все методы .NET 4.0
  • Полная ленивая оценка
  • Полная поддержка IntelliSense для VisualStudio
  • Поддержка jQuery
  • Поддержка Windows Script Хост
  • Связывание для реактивных расширений для JavaScript (RxJS) и генератора IntelliSense
  • Поддержка установки NuGet
  • Обновлено в последнее время (последний выпуск Jan 2011)
  • Синтаксис соответствует синтаксису лямбда в С#

против

  • Библиотека linq.js немного большая.
  • Если вы уже используете jQuery или другую библиотеку js, наиболее часто используемые функции, вероятно, уже доступны. См. Особенно jQuery filter и методы "Любой".

Ответ 3

Наиболее часто используемые и часто используемые операторы Linq очень часто определяются в широко используемых JS-библиотеках. У них просто разные имена (на самом деле у них более традиционные имена, чем в Linq). Select становится map, Where становится filter, First и FirstOrDefault становится [0].

Почти никакая библиотека, которую я знаю (включая, на мой взгляд, те, с которой вы связались), пытается сделать реализацию ленивой, как в .NET Linq, они просто сразу оценивают использование массивов.

Для очень приятного полного набора операций с функциональными списками попробуйте: http://osteele.com/sources/javascript/functional/

Ответ 4

Я рекомендую взглянуть на underscore.js. Это не прямой LINQ-порт, как некоторые другие, но очень удобный "LINQ-подобный" опыт. Он поддерживает все параметры фильтра, сортировки и проекта, которые мне нужны, и имеет отличную документацию и поддержку сообщества.

В качестве бонуса для пользователей Knockout существует UnderscoreKO, который добавляет методы массива Underscore к наблюдаемым массивам Knockout. Демо

Ответ 5

Я лично нахожу LINQ/set операции Union, Intersect, Except и Distinct для перечислений в .NET. очень полезно. Существует плагин jquery под названием jQuery Array Utilities, который предоставляет эти методы для использования на массивах.

Примеры кода:

$.distinct([1, 2, 2, 3])

возвращает [1,2,3]

$.union([1, 2, 2, 3], [2, 3, 4, 5, 5])

возвращает [1,2,3,4,5]

$.instersect([1, 2, 2, 3], [2, 3, 4, 5, 5])

возвращает [2,3]

$.except([1, 2, 2, 3], [3, 4, 5, 5])

возвращает [1, 2]

Ответ 6

$linq: http://jscriptlinq.codeplex.com/

var users = [{username: "asmith", domain: "north_america"},
    {username: "tmcfarland", domain: "europe"},
    {username: "cdeckard", domain: "nort_america"}];

var groups = [{user: "ASMITH", groupName: "base_users"},
    {user: "TMCFARLAND", groupName: "admins"},
    {user: "CDECKARD", groupName: "base_users"},
    {user: "CDECKARD", groupName: "testers"}];

var results = $linq(users).join(groups,
    function (x) { return x.username; },    // key for 'users'
    "x => x.user",                          // key for 'groups'
    function (outer, inner)                 // function to generate results
    { 
        return "user: " + outer.username + 
            ", domain: " + outer.domain +
            ", group: " + inner.groupName;
    },
    "(x, y) => x.toLowerCase() == y.toLowerCase()");    // compare keys case-insensitively

Ответ 7

Есть несколько дублирующих библиотек, которые пытаются переносить LINQ на JavaScript с похожими именами синтаксиса и метода. Однако в сообществе JS библиотека, которая становится очень популярной и обеспечивает ту же функциональность, Underscore.js.

Ответ 8

Я пробовал большинство из них - и мне очень нравится $linq: http://jscriptlinq.codeplex.com/ лучший. Он просто работает так, как вы ожидали бы, что С# linq будет работать, включая способность цепочки.

Ответ 9

Я ищу что-то подобное и наткнулся...

http://www.hugoware.net/Projects/jLinq

Это выглядит действительно здорово! Возможно, я просто не понимаю точку Rx и наблюдаемых по сравнению с установкой обработчиков событий через что-то вроде jQuery.

Ответ 10

Недавно я создал библиотеку LINQ для JavaScript. Он реализовал большинство функций LINQ, предоставляемых .NET, и является самым быстрым из всех библиотек LINQ.

http://fromjs.codeplex.com/