Я ищу библиотеку JavaScript, которая позволит мне запрашивать сложные объекты JSON с использованием синтаксиса, подобного LINQ. Быстрый поиск нашел несколько многообещающих вариантов, которые, похоже, могут предложить то, что мне нужно:
- Есть ли у кого-нибудь опыт их использования?
- Какие плюсы и минусы?
- Сравнима ли производительность?
- Предлагает ли синтаксис передачи функций LINQ to JavaScript какие-либо скрытые преимущества (я лично считаю синтаксис jLinq более привлекательным на первый взгляд)?
- Чего вам не хватало в любом из проектов?
- Вы когда-нибудь пробовали связаться с авторами? Насколько они отзывчивы?
- Какой проект используется более широко?
Думаю, он будет первым, кто тщательно опробуется.
javascript
json
linq
Том Тресанский
источник
источник
filter
,map
иreduce
функции массива. Новый синтаксис лямбда помогает сделать код более похожим на код LINQ.Linq-Collections
( npmjs.com/package/linq-collections ). Он использует отложенное выполнение и множество внутренних оптимизаций, чтобы работать быстро. На основе стандарта Microsoft (если вы знакомы с C # Linq, значит, вы знаете linq-коллекции)Ответы:
Вы уже видели Rx для Javascript ? Это то, что ты хочешь.
источник
Вы можете проверить linq.js . Он следует лямбда-синтаксису .NET и выглядит хорошо интегрированным в среду Microsoft.
LINQ для JavaScript - http://linqjs.codeplex.com/
Плюсы
Минусы
источник
Самые основные и часто используемые операторы Linq очень часто определяются в широко используемых библиотеках JS. Просто у них разные имена (на самом деле, у них более традиционные имена, чем в Linq).
Select
становитсяmap
,Where
становитсяfilter
,First
иFirstOrDefault
стать[0]
.Почти ни одна библиотека, о которой я знаю (включая те, с которыми вы связались), не потрудилась сделать реализацию ленивой, как в .NET Linq, они просто немедленно оценивают, используя массивы.
Чтобы получить очень хороший полный набор операций со списком функций, попробуйте: http://osteele.com/sources/javascript/functional/
источник
a1.filter(function(e) { return a2.indexOf(e) == -1; })
Я рекомендую взглянуть на underscore.js . Это не прямой порт LINQ, как некоторые другие, но очень удобный «LINQ-подобный» интерфейс. Он поддерживает все необходимые мне параметры фильтрации, сортировки и проекта, а также имеет отличную документацию и поддержку сообщества.
В качестве бонуса для пользователей Knockout есть UnderscoreKO, который добавляет методы массива Underscore к наблюдаемым массивам Knockout. Демо
источник
Я лично нахожу операции LINQ / set Union, Intersect, Except и Distinct в перечислениях в .NET. очень полезно. Существует плагин jquery под названием jQuery Array Utilities, который предоставляет эти методы для использования с массивами.
Примеры кода:
возвращает [1,2,3]
возвращает [1,2,3,4,5]
возвращает [2,3]
возвращает [1, 2]
источник
$ linq: http://jscriptlinq.codeplex.com/
источник
Есть несколько дублирующих библиотек, которые пытаются перенести LINQ на JavaScript с аналогичным синтаксисом и именами методов. Однако в сообществе JS библиотека Underscore.js становится все более популярной и предоставляет ту же функциональность .
источник
Я пробовал большинство из них - и мне больше всего нравится $ linq: http://jscriptlinq.codeplex.com/ . Он просто работает так, как вы ожидаете от C # linq, включая возможность цепочки.
источник
Сам ищу что-то подобное и наткнулся на ...
http://www.hugoware.net/Projects/jLinq
Выглядит действительно здорово! Возможно, я просто не понимаю смысла Rx и наблюдаемых по сравнению с настройкой обработчиков событий через что-то вроде jQuery.
источник
Недавно я сделал библиотеку LINQ для JavaScript. В нем реализовано большинство функций LINQ, предоставляемых .NET, и это самая быстрая из всех библиотек LINQ.
http://fromjs.codeplex.com/
источник