जावास्क्रिप्ट पुस्तकालय के लिए अग्रणी LINQ क्या है? [बन्द है]


95

मुझे एक जावास्क्रिप्ट लाइब्रेरी की तलाश है जो मुझे LINQ जैसे सिंटैक्स का उपयोग करके जटिल JSON ऑब्जेक्ट्स को क्वेरी करने की अनुमति देगा। एक त्वरित खोज में आशाजनक विकल्पों के एक जोड़े को मिला, जो देखते हैं कि वे मेरी आवश्यकता की पेशकश कर सकते हैं:

LINQ to JavaScript और jLinq

  • क्या किसी को भी उनका उपयोग करने का कोई अनुभव है?
  • कुछ पेशेवरों और विपक्ष क्या हैं?
  • क्या प्रदर्शन तुलनीय है?
  • क्या LINQ से जावास्क्रिप्ट में फ़ंक्शन-पासिंग सिंटैक्स किसी भी छिपे हुए लाभ की पेशकश करता है (मैं व्यक्तिगत रूप से पहली नज़र में jLinq के वाक्य विन्यास को अधिक आकर्षक लगता हूं)?
  • आपने किसी भी परियोजना में क्या कमी पाई है?
  • क्या आपने कभी लेखकों से संपर्क करने की कोशिश की? वे कितने उत्तरदायी थे?
  • किस परियोजना का अधिक व्यापक रूप से उपयोग किया जाता है?

मुझे लगता है कि यह पूरी तरह से प्रयास करने वाला पहला व्यक्ति होगा।


मैंने अभी jinqJs.com ओपन सोर्स प्रोजेक्ट जारी किया है, जिससे आपको मदद मिलनी चाहिए।
NYTom

LINQ 4 ES 2015, fermium-co.github.io/LINQ4ES2015 एक ही C # सिंटैक्स के साथ सभी LINQ तरीके आज़माएँ । ऑब्जेक्ट विनिर्देशों के लिए एक ही .NET LINQ को लागू किया गया।
येजर मोरडी

मैंने कुछ साल पहले dinqyjs.com जारी किया था, जिसमें लिनक-जैसा सिंटैक्स और बहुत सारी कार्यक्षमता है।
garryp

2
यह सवाल पुराना है और ठीक ही बंद कर दिया है, लेकिन पाठकों को यह के बीच होने वाले के लिए, LINQ की मुख्य विशेषताएं (, छानने बदलने, और योग) में बनाया का उपयोग किया जा सकता है filter, mapऔर reduceसरणी कार्य करता है। नया लैम्ब्डा सिंटैक्स कोड को लाइनक्यू कोड के समान दिखने में मदद करता है।
19pm पर jpmc26

कुछ महीने पहले मैंने Linq-Collections( npmjs.com/package/linq-collections ) जारी किया । यह तेजी से धधकते होने के लिए आस्थगित निष्पादन और आंतरिक अनुकूलन के टन का उपयोग करता है। Microsoft के मानक के आधार पर (यदि आप C # Linq जानते हैं तो आप linq-collection जानते हैं)
Ivan Sanz-Carasa

जवाबों:


13

क्या आपने जावास्क्रिप्ट के लिए Rx देखा है , फिर भी? ये वही है जो आप चाहते हो।


2
मैं यह सुझाव देने जा रहा था, लेकिन यह वास्तव में वस्तुओं के लिए linq के समान नहीं है। (यदि यह था, तो हमें .NET में वस्तुओं के लिए Rx और Linq दोनों की आवश्यकता क्यों होगी?) यह डेटा के प्रवाह के संदर्भ में सामान्य Linq के विपरीत दिशा में काम करता है।
डैनियल ईयरविकेर

25
मुझे नफरत है कि यह स्वीकृत उत्तर है। हाँ, यकीन है, यह अकादमिक रूप से दिलचस्प है कि .NET में वेधशाला enumerables के समान हैं, लेकिन क्या है? लगभग कोई भी जो इस सवाल को नहीं पाता है वह वास्तव में आरएक्स / ऑब्जर्वबल्स चाहता है (नॉकआउट, एंगुलरज आदि में पहले से ही बहुत अधिक उपयोगी कार्यान्वयन हैं) और जवाब खुद भी यह समझाने की कोशिश नहीं करता है कि प्रासंगिकता क्या है, और यहां तक ​​कि अगर यह था वास्तव में सबसे उपयुक्त विकल्प, यह मुश्किल से "अग्रणी" है - इसमें linq.js. के लगभग 1/5 डाउनलोड हैं।
आरोन

2
@Aaronaught जवाब 3 साल पहले दिया गया था, और चीजें निश्चित रूप से बदल गई हैं, और linq.js अब आगे की तरफ रास्ता है। उस समय, मेरा मानना ​​था कि जेएक्स के साथ LINQ ऑपरेशंस करने के लिए rx.js सबसे अच्छा दांव था, क्योंकि अन्य लाइब्रेरी बढ़िया या अधूरी नहीं थीं और RX पर फुलटाइम डेवलपर्स काम कर रहे थे। इसके अलावा, async महत्वपूर्ण था और अभी भी है, IMO, जावास्क्रिप्ट में - जो कि आपको वेधशालाओं के साथ मिलता है। अंत में, आरएक्स में नोट ऑब्जर्वबल्स नॉकआउट और एंगुलरजेएस ऑब्जर्वबल्स से बहुत अलग हैं, और विभिन्न उद्देश्यों की सेवा करते हैं। आपकी राय नोट की गई है, और आप मतदान करने के लिए स्वतंत्र हैं! :)
रिचर्ड एंथनी हेन

2
@Aaronaught एक और नोट ... अगर कोई जावास्क्रिप्ट के लिए LINQ संबंधित पुस्तकालयों की तलाश कर रहा है, तो उन्हें निश्चित रूप से Rx के बारे में पता होना चाहिए, क्योंकि यह 100% LINQ है, और LINQ को जानना लेकिन Rx वास्तव में केवल आधी कहानी जानना नहीं है। चीयर्स।
रिचर्ड एंथनी हेन

2
RX, Linq, और JavaScript के साथ व्यापक अनुभव होने के बाद, मैं बिना किसी हिचकिचाहट के कह सकता हूं कि किसी को जावास्क्रिप्ट के लिए Linq जैसी लाइब्रेरी की तलाश में निश्चित रूप से RX के बारे में जानने की आवश्यकता नहीं है, और यह केवल आधी कहानी है यदि आप विशेष रूप से "कहानी" को परिभाषित करते हैं आधा आरएक्स होना। अन्यथा दावा करना पानी को खराब कर रहा है और सरल आवश्यकताओं वाले लोगों के लिए उनके विकल्पों को समझना अधिक कठिन बना रहा है। यह किसी को बताने के लिए है जो साइकिल की तलाश में है जिसे उन्हें पहले मोटरसाइकिल के बारे में जानने की जरूरत है; निश्चित रूप से, संबंध दिलचस्प है, लेकिन संदर्भ में विशेष रूप से उपयोगी नहीं है।
आरोन

71

आप linq.js की जाँच कर सकते हैं । यह .NET लैम्ब्डा सिंटैक्स का अनुसरण करता है और Microsoft वातावरण में अच्छी तरह से एकीकृत होता है।

LINQ जावास्क्रिप्ट के लिए - http://linqjs.codeplex.com/

पेशेवरों

  • सभी .NET 4.0 विधियों को लागू करता है
  • पूर्ण आलसी मूल्यांकन
  • VisualStudio के लिए पूर्ण IntelliSense समर्थन
  • JQuery का समर्थन करता है
  • विंडोज स्क्रिप्ट होस्ट का समर्थन करता है
  • जावास्क्रिप्ट (RxJS) और IntelliSense जनरेटर के लिए प्रतिक्रियाशील एक्सटेंशन के लिए बाइंडिंग
  • NuGet समर्थन स्थापित करें
  • हाल ही में अपडेट किया गया (अंतिम रिलीज़ जनवरी 2011)
  • सिंटैक्स C # में लैम्ब्डा सिंटैक्स के अनुरूप है

विपक्ष

  • Linq.js लाइब्रेरी थोड़ी बड़ी है।
  • यदि आप पहले से ही jQuery या अन्य js लाइब्रेरी का उपयोग कर रहे हैं, तो आमतौर पर उपयोग की जाने वाली कार्यक्षमता संभवतः पहले से ही उपलब्ध है। विशेष रूप से jQuery के फ़िल्टर , और 'Any' विधियों को देखें।


टाइपस्क्रिप्ट डीईएफ फ़ाइल HOT है!
kevp

1
@AlexeyF नहीं linq.js हालांकि?
एलेक्स

33

सबसे बुनियादी और अक्सर इस्तेमाल किए जाने वाले लाइनक ऑपरेटरों को आमतौर पर व्यापक रूप से इस्तेमाल किए जाने वाले जेएस पुस्तकालयों में परिभाषित किया जाता है। उनके पास बस अलग-अलग नाम हैं (वास्तव में, उनके पास लिनक की तुलना में अधिक पारंपरिक नाम हैं)। Selectहो जाता है map, Whereहो जाता है filter, Firstऔर FirstOrDefaultबन [0]

लगभग कोई भी लाइब्रेरी जो मुझे नहीं पता (जिनमें मुझे लगता है कि आप से जुड़े हुए हैं) .NET लाइनक के रूप में कार्यान्वयन को आलसी बनाने के लिए परेशान करते हैं, वे बस सरणियों का उपयोग करके तुरंत मूल्यांकन करते हैं।

कार्यात्मक सूची संचालन के बहुत अच्छे, पूर्ण सेट के लिए, कोशिश करें: http://osteele.com/sources/javascript/functional/


LINQ से परिचित होने के नाते, सिंटैक्स के रूप में ज्यादा रखने से बहुत बड़ी मदद मिलेगी। आलसी लोडिंग एक चिंता का विषय नहीं है। ऐसा लगता है कि यह मेरी ज़रूरत की सभी कार्यक्षमता है, लेकिन मुझे कुछ प्रयोग करने होंगे। मैं अब के लिए सवाल खुला रख रहा हूँ, इस उम्मीद में कि कोई व्यक्ति होगा जिसने जावास्क्रिप्ट LINQ पुस्तकालयों का उपयोग किया है और अपने अनुभवों को साझा करता है। कुछ समय बीतने के बाद, यदि कोई और नहीं करता है, तो मैं आपको उत्तर देना सुनिश्चित करूंगा।
टॉम ट्रान्स्की

25
@ टॉम - मैं पुस्तकालयों से थोड़ा सावधान रहना चाहता हूं जो भाषा के अंदर भाषा X का उपयोग करने के अनुभव को अनुकरण करने का प्रयास करते हैं यदि भाषा में एक ही काम करने का एक अच्छा तरीका है Y। मुझे लगता है कि "मुहावरों को सीखना बेहतर है। "भाषा वाई के लोग। लिनक बाहर आने से पहले जेएस में कार्यात्मक अनुक्रम ऑपरेटर लिख रहे थे, और जेएस में उन्होंने" पारंपरिक "लिस्फी नाम और दृष्टिकोण रखे, ताकि अब अधिक जेएस शैली हो। तो मैं कहता हूं "जब रोम में ..." यहां तक ​​कि मैं कैसे घुंघराले ब्रेसिज़ बिछाता हूं, जो सी # में लंबवत रूप से पंक्तिबद्ध होते हैं, लेकिन जेएस और जावा में मैंने पहले एक ही लाइन पर रखा, आदि
डैनियल ईयरविकर।

2
बहुत उपयोगी उत्तर - विशेष रूप से जो 'मैप्स' को 'मैप' में चुनता है। उस स्थिति में, अंडरस्कोर.जे का उपयोग भी किया जा सकता है
पांडावुड

1
दो सरणियों में शामिल होने के बारे में क्या? मैं यह जानने की कोशिश कर रहा था कि सरणी A के तत्वों को कैसे प्राप्त किया जा सकता है जो कि सरणी B में नहीं हैं, लेकिन JQuery में ऐसा करने का कोई तरीका प्रतीत नहीं होता है। यह LINQ में काफी मामूली है।
नोएल अब्राहम

@ नोएल अब्रह्म - इस तरह की चीज़ के लिए jQuery के बजाय ES5 एरे तरीकों का उपयोग क्यों नहीं किया जाता है? जैसेa1.filter(function(e) { return a2.indexOf(e) == -1; })
डैनियल ईयरविकर

10

मैं underscore.js पर एक नज़र लेने की सलाह देता हूं । यह दूसरों की तरह एक सीधा LINQ पोर्ट नहीं है, लेकिन एक बहुत ही आरामदायक "LINQ- जैसा" अनुभव है। यह सभी फ़िल्टर, सॉर्ट और प्रोजेक्ट विकल्पों का समर्थन करता है जिनकी मुझे आवश्यकता है और उत्कृष्ट प्रलेखन और सामुदायिक समर्थन है।

नॉकआउट उपयोगकर्ताओं के लिए एक बोनस के रूप में , अंडरस्कोर है जो नॉकआउट के पर्यवेक्षी सरणियों में अंडरस्कोर की सरणी विधियों को जोड़ता है। डेमो


3
मैं निश्चित रूप से अंडरस्कोर का भी सुझाव दूंगा। दुर्भाग्य से सभी उपलब्ध पुस्तकालयों में प्रदर्शन के संबंध में कमी है। एसी # डेवलपर होने के नाते, मैं एक जावास्क्रिप्ट उन्मुख पुस्तकालय के साथ सी # सिंटैक्स रखना पसंद करूंगा लेकिन ऐसा कोई भी उपलब्ध नहीं है। उपर्युक्त सभी पुस्तकालयों में "जावास्क्रिप्ट रैपर" हैं, जिसका अर्थ है कि वे LINQ फ़ंक्शंस को c # तरीके से लागू करने का प्रयास करते हैं। उदाहरण के लिए, linq.js को देखते हुए उनके पास एक डिक्शनरी होती है, जिसे पाने वाले के लिए एक रेखीय खोज होती है। जावास्क्रिप्ट की वस्तु IS A DICTIONARY with D है। बेहतर प्रदर्शन लेकिन इसके बजाय उन्होंने
गेटहैशकोड

4
LINQ की विशिष्ट विशेषता आलसी मूल्यांकन है। Underscore.js में यह कार्यक्षमता नहीं है। हालांकि, वहाँ है lodash श्रृंखलित तरीकों पर जो अंडरस्कोर का सुपरसेट है, बेहतर प्रदर्शन करता है और समर्थन करता है आलसी मूल्यांकन: var आगमन = _.range (1000); _ (अरै) .मैप (फंक्शन (v) {रिटर्न v + 1;})। फिल्टर (फंक्शन (v) {v v 2%;}) ले (100) .value ();
srgstm 13

3
हाँ ... यह कुछ समय पहले लिखा गया था; मैं संभवतः लॉश को भी सुझाऊंगा। मैं दर्ज करने की अनुमति देने के लिए अंडरस्कोरॉक को धन्यवाद देने पर विचार कर रहा हूं। लेकिन मुझे यकीन नहीं है कि मैं मानता हूं कि आलसी मूल्यांकन LINQ की "विशिष्ट विशेषता" है। अधिकतर लाइनक्यू की मेरी प्रशंसा यह है कि यह आम तौर पर चीजों को करने के वैकल्पिक तरीकों से बेहतर इरादे का संचार करता है। सिर्फ एक विचार। किसी भी दर पर दोनों अच्छे पुस्तकालय।
मैथ्यू निकोल्स

4

मैं व्यक्तिगत रूप से LINQ / सेट ऑपरेशंस यूनियन, इंट्रैक्ट, सिवाय और डिस्टिंक्ट को खोजने के लिए .NET में enumerables पर पाता हूं। बहुत उपयोगी। 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- यूटिलिटीज भी bower का उपयोग करके स्थापित किया जा सकता है । मैं एक डिस्क्लेमर जोड़ना चाहूंगा कि मैंने मूल रूप से प्लगइन बनाया :)
क्रिस्टियन अब्राहमसेन

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 को जावास्क्रिप्ट में पोर्ट करने की कोशिश करते हैं। हालाँकि, JS समुदाय में, वह लाइब्रेरी जो वास्तव में लोकप्रिय हो रही है और समान कार्यक्षमता प्रदान कर रही है, वह है अंडरस्कोर ।js


2

मैंने इनमें से अधिकांश को आज़माया है - और मुझे वास्तव में $ linq पसंद है: http://jscriptlinq.codeplex.com/ सर्वश्रेष्ठ। यह बस उस तरह से काम करता है जिस तरह आप सी # लाइनक को काम करने की उम्मीद करेंगे - जिसमें चेन की क्षमता भी शामिल होगी।


1

मैं अपने आप से कुछ इस तरह की तलाश कर रहा हूं ...

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

यह वास्तव में बहुत अच्छा लग रहा है! शायद मैं jQuery की तरह कुछ के माध्यम से घटना संचालकों की स्थापना की तुलना में आरएक्स और वेधशालाओं के बिंदु को नहीं समझता हूं।


0

मैंने हाल ही में जावास्क्रिप्ट के लिए एक LINQ लाइब्रेरी बनाई। यह .NET द्वारा प्रदत्त अधिकांश LINQ फ़ंक्शन को कार्यान्वित करता है और यह सभी LINQ लाइब्रेरीज़ में से सबसे तेज़ है।

http://fromjs.codeplex.com/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.