主要なLINQ for JavaScriptライブラリとは何ですか?[閉まっている]


95

LINQのような構文を使用して複雑なJSONオブジェクトをクエリできるJavaScriptライブラリを探しています。クイック検索で、私が必要とするものを提供してくれると思われる有望なオプションがいくつか見つかりました。

LINQ to JavaScriptおよびjLinq

  • それらを使用した経験がある人はいますか?
  • いくつかの長所と短所は何ですか?
  • 性能は同等ですか?
  • LINQ to JavaScriptの関数を渡す構文には隠された利点がありますか(私は一見すると、jLinqの構文の方が魅力的だと個人的に思っています)。
  • どちらのプロジェクトにも欠けているものはありますか?
  • 著者に連絡してみたことはありますか?彼らはどのように反応しましたか?
  • どのプロジェクトがより広く使用されていますか?

徹底的にトライするのは初めてだと思います。


jinqJs.comオープンソースプロジェクトをリリースしました。
NYTom 2015年

LINQ 4 ES 2015、fermium-co.github.io / LINQ4ES2015を試す同じC#構文のすべてのLINQメソッド。オブジェクト仕様に同じ.NET LINQを実装しました。
Yaser Moradi 2015

dinqyjs.comを数年前にリリースしましたが、Linqに似た構文と多くの機能があります。
garryp

2
この問題は、古いと正しく閉じられ、それを横切って起こるリーダ、LINQの主な機能のために(、フィルタリング形質転換、及び凝集)に内蔵用いて行うことができfiltermapおよびreduceアレイ機能。新しいラムダ構文は、コードをLINQコードにはるかに似たものにするのに役立ちます。
jpmc26

数ヶ月前にリリースしましたLinq-Collectionsnpmjs.com/package/linq-collections)。延期された実行と大量の内部最適化を使用して、非常に高速です。Microsoftの標準に基づく(C#Linqを知っていれば、linq-collectionsを知っている)
Ivan Sanz-Carasa

回答:


13

あなたはまだRx for Javascriptを見ましたか?それがあなたの望みです。


2
私はこれを提案するつもりでしたが、オブジェクトへのlinqと実際には同じではありません。(もしそうなら、なぜ.NETのオブジェクトにRxとLinqの両方が必要なのでしょうか?)データの流れという点では、通常のLinqとは逆の方向に機能します。
Daniel Earwicker

24
これが受け入れられた答えであると私は嫌いです。ええ、確かに、.NETのオブザーバブルが列挙型に似ていることは学術的に興味深いですが、それではどうでしょうか。この質問を見つけた人が実際にRX /オブザーバブルを望んでいることはほとんどなく(ノックアウト、angularjsなどで、はるかに有用な実装がすでにあります)、回答自体は関連性が何であるかを説明しようとはしていません。本当に最も適切な選択であり、ほとんど「リード」していません-linq.jsのダウンロードの約1/5です。
アーロンノート、2013

2
@Aaronaught答えは3年以上前に与えられました、そして、物事は確かに変わりました、そしてlinq.jsは今それがその当時のものよりはるかに進んでいます。当時、私は他のライブラリーが優れていたり不完全だったりせず、RXがフルタイムの開発者に取り組んでいたため、JSでLINQ操作を行うにはrx.jsが最善の策であると信じていました。また、非同期は重要でしたが、JavaScriptではIMOのままです-これは、Observablesで得られるものです。最後に、RxのObservableはKnockoutやAngularJS Observableとは非常に異なり、目的が異なることに注意してください。あなたの意見は記録され、自由に投票できます!:)
Richard Anthony Hein 2013

2
@Aaronaughtもう1つ注意してください...誰かがJavaScript用のLINQ関連ライブラリを探している場合、100%LINQであるため、Rxについて確実に知っている必要があります。LINQを知っていても、Rxは実際には半分しかわかっていません。乾杯。
Richard Anthony Hein 2013

2
RX、Linq、JavaScriptに関する豊富な経験があるので、JavaScript用のLinqのようなライブラリを探している人はRXについて知っている必要はなく、具体的に「ストーリー」を定義すれば、話の半分に過ぎないことは言うまでありませ。 RXの半分になる。そうでなければ、水を濁らせ、単純な要件を持つ人々が選択肢を理解するのをより困難にします。それは、自転車を探している人に、まずバイクについて学ぶ必要があると伝えるようなものです。確かに、この関係は興味深いものですが、コンテキストでは特に有用ではありません。
アーロンノート、2013

71

linq.jsをチェックしてみてください。これは.NETラムダ構文に従い、Microsoft環境にうまく統合されているように見えます。

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

長所

  • すべての.NET 4.0メソッドを実装します
  • 完全な遅延評価
  • VisualStudioのIntelliSenseの完全サポート
  • jQueryをサポート
  • Windowsスクリプトホストをサポート
  • JavaScript(RxJS)およびIntelliSense GeneratorのReactive Extensionsのバインディング
  • NuGetインストールのサポート
  • 最近更新(最終リリース2011年1月)
  • 構文はC#のラムダ構文に準拠

短所

  • linq.jsライブラリーは少し大きいです。
  • すでにjQueryまたは他のjsライブラリを使用している場合、最も一般的に使用される機能はおそらくすでに利用可能です。特にjQueryのfilterと 'Any'メソッドを参照してください。

2
いくつかのlinqのようなライブラリのパフォーマンス比較を見つけました:danieltao.com/lazy.js/comparisons.html
Alexey F

Typescript defファイルはホットです!
kevp

1
@AlexeyF linq.jsはありませんか?
Alex

33

最も基本的で頻繁に使用されるLinq演算子は、広く使用されているJSライブラリで非常に一般的に定義されています。それらは単に異なる名前を持っています(実際、Linqよりも従来の名前があります)。SelectなるmapWhereなるfilterFirstそしてFirstOrDefaultなる[0]

.NET Linqのように実装を遅延させるために気にするライブラリ(リンクしているライブラリも含む)はほとんどなく、配列を使用してすぐに評価されます。

機能的なリスト操作の非常に優れた完全なセットについては、以下を試してください:http : //osteele.com/sources/javascript/functional/


LINQに精通しているため、構文を同じに保つことは非常に役立ちます。遅延読み込みは問題ではありません。これには必要な機能がすべて備わっているようですが、いくつか試してみる必要があります。JavaScript LINQライブラリを使用し、その経験を共有している誰かにつまずくと期待して、私は今のところ質問を開いたままにしています。しばらくして、他の人がいない場合は、必ず答えをあげます。
Tom Tresansky、2010年

25
@トム-言語Yで同じことを行う良い方法がすでにある場合、言語Yの内部で言語Xを使用するエクスペリエンスをシミュレートしようとするライブラリには少し注意する傾向があります。「イディオム」を学ぶ方が良いと思います"言語Yの。人々はLinqが登場する前にJSで関数シーケンス演算子を書いており、JSでは"伝統的な "Lispyの名前とアプローチを維持していたため、今ではJSスタイルが増えています。だから私は「ローマにいるとき...」と言います。C#では垂直に並ぶ中括弧をどのようにレイアウトしても、JSとJavaでは最初の1つを同じ行に配置するなど
Daniel Earwicker

2
非常に便利な答え-特に「select」は「map」にマップします その場合、underscore.jsも使用できます
PandaWood

1
2つのアレイを結合するのはどうですか?配列Bにない配列Aの要素を取得する方法を理解しようとしましたが、JQueryでそれを行う方法がないようです。これはLINQでは非常に簡単です。
Noel Abrahams

@Noel Abrahams-この種のことについては、jQueryの代わりにES5配列メソッドを使用しないのはなぜですか?例a1.filter(function(e) { return a2.indexOf(e) == -1; })
Daniel Earwicker、

10

underscore.jsをご覧になることをお勧めします。他のいくつかのような直接LINQポートではありませんが、非常に快適な「LINQのような」エクスペリエンスです。必要なすべてのフィルター、並べ替え、プロジェクトオプションをサポートし、優れたドキュメントとコミュニティサポートを備えています。

以下のためのボーナスとしてノックアウトユーザー、ありUnderscoreKOノックアウトの観察可能な配列に下線の配列のメソッドを追加します。デモ


3
私もアンダースコアを提案するでしょう。残念ながら、利用可能なライブラリはすべてパフォーマンスに関して不足しています。私自身はC#開発者なので、JavaScript指向のライブラリーでC#構文を使用したいのですが、そのようなものはありません。前述のライブラリはすべて「JavaScriptラッパー」です。つまり、LINQ関数をc#で実装しようとします。たとえば、linq.jsを見ると、ゲッターが線形検索を実行するディクショナリがあります。Javascriptのオブジェクトは、優れたパフォーマンスですが、代わりにGetHashCodesなどを実装しました
George Mavritsakis 2013年

4
LINQの特徴は遅延評価です。Underscore.jsにはこの機能はありません。ただし、アンダースコアのスーパーセットであるlodashがあり、パフォーマンス高く、チェーンメソッドの遅延評価をサポートしています。var arr = _.range(1000); _(arr).map(function(v){return v + 1;})。filter(function(v){return v%2;})。take(100).value();
srgstm

3
はい...これは少し前に書かれました。私も今はロダッシュをお勧めします。UnderdashcoreKOをフォークしてlodashを許可することを検討しています。しかし、遅延評価がLINQの「特徴的な」特徴であることには同意しません。主に私のLINQへの感謝は、通常、他の方法で行うよりも意図をうまく伝えることです。ちょっとした考え。とにかく両方の良いライブラリ。
マシューニコルズ

4

個人的には、.NETの列挙型に対してLINQ /集合演算Union、Intersect、Except、Distinctを見つけました。非常に便利。配列で使用されるこれらのメソッドを提供するjQuery Array Utilitiesと呼ばれるjqueryプラグインがあります。

コード例:

$.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]を返します


このパッケージjquery-array-utilitiesは、bowerを使用してインストールすることもできます。最初にプラグインを作成したという免責事項を追加したいと思います:)
Kristian Abrahamsen

3

$ 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

2

同様の構文とメソッド名でLINQをJavaScriptに移植しようとする重複ライブラリがいくつかあります。ただし、JSコミュニティでは、非常に人気が高まり、同じ機能を提供するライブラリはUnderscore.jsです。


2

私はこれらのほとんどを試しました-そして$ linqが本当に好きです:http : //jscriptlinq.codeplex.com/最高です。これは、C#linqが動作するのと同じように機能します(チェーン機能を含む)。


1

私はこのようなものを自分で探していて、出くわしました...

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

これは本当に素晴らしいです!多分私はjQueryのようなものを通してイベントハンドラを設定することと比較してRxとオブザーバブルのポイントを理解していないだけかもしれません。


0

最近、JavaScript用のLINQライブラリを作成しました。.NETが提供するほとんどのLINQ関数を実装し、すべてのLINQライブラリの中で最速です。

http://fromjs.codeplex.com/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.