Estou procurando uma biblioteca JavaScript que me permita consultar objetos JSON complexos usando uma sintaxe semelhante ao LINQ. Uma rápida pesquisa encontrou algumas opções promissoras que parecem oferecer o que preciso:
- Alguém tem alguma experiência em usá-los?
- Quais são alguns prós e contras?
- O desempenho é comparável?
- A sintaxe de passagem de função do LINQ to JavaScript oferece algum benefício oculto (pessoalmente, acho a sintaxe do jLinq mais atraente à primeira vista)?
- O que você achou que falta em qualquer um dos projetos?
- Você já tentou entrar em contato com os autores? Eles foram responsivos?
- Qual projeto é mais amplamente utilizado?
Acho que será o primeiro a fazer um teste completo.
javascript
json
linq
Tom Tresansky
fonte
fonte
filter
,map
ereduce
funções de matriz. A nova sintaxe lambda ajuda a tornar o código muito mais semelhante ao código LINQ.Linq-Collections
( npmjs.com/package/linq-collections ). Ele usa execuções adiadas e toneladas de otimizações internas para ser extremamente rápido. Baseado no padrão da Microsoft (se você conhece C # Linq, então conhece linq-Collections)Respostas:
Você já viu Rx para Javascript ? Isso é o que você quer.
fonte
Você pode querer verificar para fora linq.js . Ele segue a sintaxe lambda do .NET e parece estar bem integrado em um ambiente Microsoft.
LINQ para JavaScript - http://linqjs.codeplex.com/
Prós
Contras
fonte
Os operadores Linq mais básicos e usados com frequência são comumente definidos em bibliotecas JS amplamente usadas. Eles apenas têm nomes diferentes (na verdade, eles têm nomes mais tradicionais do que no Linq).
Select
torna-semap
,Where
torna-sefilter
,First
eFirstOrDefault
se tornar[0]
.Quase nenhuma biblioteca que conheço (incluindo as que você vinculou) se preocupou em tornar a implementação preguiçosa como no .NET Linq, eles apenas avaliam imediatamente usando matrizes.
Para obter um conjunto muito bom e completo de operações de lista funcional, tente: http://osteele.com/sources/javascript/functional/
fonte
a1.filter(function(e) { return a2.indexOf(e) == -1; })
Eu recomendo dar uma olhada em underscore.js . Não é uma porta LINQ direta como algumas das outras, mas é uma experiência "semelhante ao LINQ" muito confortável. Ele oferece suporte a todas as opções de filtro, classificação e projeto de que preciso e possui excelente documentação e suporte da comunidade.
Como um bônus para os usuários do Knockout , existe o UnderscoreKO que adiciona métodos de array do Underscore aos arrays observáveis do Knockout. Demo
fonte
Eu pessoalmente acho as operações LINQ / set Union, Intersect, Except e Distinct em enumerables em .NET. muito útil. Existe um plugin jquery chamado jQuery Array Utilities que fornece esses métodos para serem usados em arrays.
Exemplos de código:
retorna [1,2,3]
retorna [1,2,3,4,5]
retorna [2,3]
retorna [1, 2]
fonte
$ linq: http://jscriptlinq.codeplex.com/
fonte
Existem algumas bibliotecas duplicadas que tentam portar LINQ para JavaScript com sintaxe e nomes de método semelhantes. No entanto, na comunidade JS, a biblioteca que está se tornando muito popular e fornecendo a mesma funcionalidade é Underscore.js .
fonte
Eu tentei a maioria deles - e realmente gosto de $ linq: http://jscriptlinq.codeplex.com/ o melhor. Ele simplesmente funciona da maneira que você esperaria que o c # linq funcionasse - incluindo a capacidade de encadear.
fonte
Estou procurando algo assim e me deparei com ...
http://www.hugoware.net/Projects/jLinq
Isso parece realmente ótimo! Talvez eu simplesmente não entenda o ponto de Rx e observáveis em comparação com a configuração de manipuladores de eventos por meio de algo como jQuery.
fonte
Recentemente, fiz uma biblioteca LINQ para JavaScript. Ele implementou a maioria das funções LINQ fornecidas pelo .NET e é a mais rápida de todas as bibliotecas LINQ.
http://fromjs.codeplex.com/
fonte