98 votes

Qu'est-ce que le leader de LINQ pour la bibliothèque JavaScript?

Je suis à la recherche d'une bibliothèque JavaScript qui va me permettre de requête complexe objets JSON à l'aide d'une LINQ-syntaxe. Une recherche rapide trouvé un couple d'options prometteuses qui ressemblent ils pourraient offrir ce dont j'ai besoin:

LINQ to JavaScript et jLinq

  • Ce que quelqu'un a la moindre expérience leur utilisation?
  • Quels sont les avantages et les inconvénients?
  • Les performances sont-elles comparables?
  • La fonction de passage de la syntaxe de LINQ to JavaScript offre tous avantages cachés (Personnellement, je trouve la syntaxe de jLinq plus attrayante sur la première coup d'oeil)?
  • Qu'avez-vous fait défaut dans l'un ou l'autre projet?
  • Avez-vous déjà essayer de contacter les auteurs? Comment réactif étaient-ils?
  • Ce projet est plus largement utilisé?

EDIT:

Juste vu cela aujourd'hui: jslinq.

Je pense qu'il sera le premier à obtenir une complète try-out.

72voto

Nathan Palmer Points 1085

Vous voudrez peut-être consulter linq.js. Il suit l' .NET lambda syntaxe et semble être bien intégré dans l'environnement Microsoft.

LINQ pour JavaScript - http://linqjs.codeplex.com/

Pros

  • Met en œuvre tous .NET 4.0 méthodes
  • Compléter l'évaluation différée
  • La pleine prise en charge IntelliSense pour VisualStudio
  • Prend en charge jQuery
  • Prend En Charge Windows Script Host
  • De liaison pour Reactive Extensions pour le JavaScript(RxJS) et IntelliSense Générateur
  • NuGet installer la prise en charge
  • Mise à jour récemment (dernière version Janv 2011)
  • La syntaxe est conforme à lambda de syntaxe en C#

Cons

  • L'linq.js la bibliothèque est un peu gros.
  • Si vous êtes déjà à l'aide de jQuery ou autre librairie js, les plus couramment utilisés fonctionnalité est probablement déjà disponibles. Voir notamment jQuery 'filtre', et 'Tout' méthodes.

37voto

Daniel Earwicker Points 63298

Les plus élémentaires et les plus fréquemment utilisés opérateurs Linq sont très définis largement utilisé les librairies JS. Ils ont juste des noms différents (en fait, ils ont plus de noms traditionnels que dans Linq). Select devient map, Where devient filter, First et FirstOrDefault deviennent [0].

Presque pas de bibliothèque que je connais (y compris, je pense que ceux que vous avez lié à) la peine de faire de la mise en œuvre des paresseux que dans .NET, Linq, ils ont juste évaluer immédiatement à l'aide de tableaux.

Pour une très belle série complète de la fonctionnelle de fonctionnement de la liste, essayez de: http://osteele.com/sources/javascript/functional/

14voto

Richard Hein Points 6697

Avez-vous vu Rx pour Javascript, encore? Qu'est ce que vous voulez.

11voto

Matthew Nichols Points 1327

Je vous recommande de prendre un coup d'oeil à underscore.js. Il n'est pas direct LINQ port comme certains des autres, mais il est très à l'aise "LINQ" comme de l'expérience. Il prend en charge tous les filtrer, trier, et les options de projet que j'ai besoin et a une excellente documentation et le soutien de la communauté.

Comme un bonus pour knock-out utilisateurs, il est UnderscoreKO qui ajoute un trait de Soulignement de méthodes de tableau à élimination directe de l'observable tableaux. Démo

4voto

Janus Troelsen Points 5121

$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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X