2010-07-07 5 views
9

क्या सवाल कहता है ...क्या डीओएम के समान तरीके से बहु-आयामी सरणी पूछने के लिए कोई jquery विशेषताएं हैं?

क्या jQuery में कोई भी तरीका है जो आपको डीओएम के साथ समान रूप से ऑब्जेक्ट्स के बहु-आयामी सरणी से पूछने की अनुमति देगा।

तो उदाहरण के लिए, मुझे एक बहु-आयामी सरणी के भीतर निहित वस्तुओं कुछ मिलान संपत्ति के मूल्य होने की एक सूची प्राप्त - उदाहरण के लिए, जहां StartOfPeriod एक निर्धारित तिथि से बड़ा या जहां नाम == "बेन Alabaster"

मैं अगर वहां कुछ पहले से बाहर है तो पहिया को फिर से आविष्कार से बचाना पसंद है।

+6

+1 दिलचस्प प्रश्न – alex

+0

तो आप इस खोज को कैसे देखेंगे? '$ (ओबीजे)। ढूँढें (" * [StartOfPeriod = 'बेन अलबास्टर'] ");'? –

+0

@ डैन हेबरडेन - मैंने अनुमान लगाया था कि मुझे विशेष रूप से किसी भी तरह से दिखने की कल्पना नहीं हुई थी, लेकिन आपके द्वारा सुझाए गए सिंटैक्स मुझे लगता है कि काफी अच्छा होगा। – BenAlabaster

उत्तर

6

आप चयनकर्ता वाक्यविन्यास का उपयोग नहीं कर सकते हैं, लेकिन jQuery $.grep और $.inArray के साथ आता है, जो इसके लिए उपयोगी हो सकता है। grep तत्वों की एक नई सरणी देता है जो एक अनुमान से मेल खाता है। inArray पहले मिलान तत्व, या -1 की अनुक्रमणिका देता है। उदाहरण के लिए:

var matches = $.grep(array, function(el){ 
    return el.StartOfPeriod > 2000; 
}); 

ये मानक ECMAScript तरीकों, Array.filter (grep को simimlar) और Array.indexOf (inArray के समान) के समान हैं; jQuery वास्तव में Array.indexOf का उपयोग करता है जहां उपलब्ध है। Array.every (मिलान करने वाले सभी तत्व) और Array.some (कम से कम एक मिलान) जैसी अन्य उपयोगी ईसीएमएस्क्रिप्ट विधियां भी हैं। एमडीसी में कोड है जिसे आप अपने प्रोजेक्ट में जोड़ सकते हैं, इसलिए उन कार्यों में इन कामों में मूल कार्यान्वयन नहीं है।

+0

यह एकल आयाम सरणी पर अच्छी तरह से काम करता है, और मैं इसे पहले ही मानता हूं, और मैं इसे प्लगइन के आधार के रूप में उपयोग कर सकता हूं, लेकिन मुझे आश्चर्य हुआ कि क्या कुछ पहले से मौजूद है जो बहु-आयामी सरणी - यानी 2 डी, 3 डी आदि – BenAlabaster

2

आपको एक प्लगइन मिल सकता है, लेकिन jQuery कोर में नहीं। कुछ सहायक सरणी विधियां हैं: each, unique, inArray। संयोजन में, आप अपनी जरूरतों को पूरा करने के लिए कुछ कस्टम बना सकते हैं।

जो आप खोज रहे हैं वह xpath जैसे ट्रैवर्सल के साथ एक सेट लाइब्रेरी है। प्रोटोटाइप में सरणी विधियों का एक बड़ा सेट है। लेकिन फिर भी शायद बॉक्स से आपकी सटीक जरूरतों को पूरा नहीं करेंगे।

मैं एलेक्स से सहमत हूं, ऐसी लाइब्रेरी/एक्सटेंशन दिलचस्प होगा।

+0

मैं विस्तार से कहा गया विस्तार पर विचार कर रहा हूं, लेकिन मैं पहिया को अनावश्यक रूप से पुन: पेश नहीं करना चाहता हूं। – BenAlabaster

+1

यह निश्चित रूप से एक शानदार विस्तार होगा। मैं अपने * स्निकर * स्पेयर टाइम में लिखना शुरू कर सकता हूं। –

+1

@ रयान किनल: बस अपने ग्राहकों में से किसी एक के लिए एक की आवश्यकता होने का बहाना ढूंढें;) मैं सिर्फ यह समझने की कोशिश कर रहा हूं कि मैं चयनकर्ता वाक्यविन्यास जैसा दिखाना चाहता हूं, शायद नियमित वाक्यविन्यास की तरह। यदि आप कुछ कोडिंग के रूप में प्राप्त करते हैं, तो शायद हम एक दूसरे से कुछ विचार उछाल सकते हैं। – BenAlabaster

1

मैं सिर्फ यह लिखा है .. मैं यह ठीक से काम लगता है लेकिन यह निश्चित रूप :)

साफ हो सकता है
function findMatchingObjects(obj, member, value){ 
    var final = new Array(); 
    var temp = new Array(); 
    for(var p in obj){ 
    if (typeof obj[p] == 'object') { 
    temp = findMatchingObjects(obj[p], member, value); 
    if (temp.length == 1) 
     final.push(temp[0]); 
    } 
    if (p == member && obj[p] == value) { 
    final.push(obj); 
    } 
    } 
    alert(final.length); 
    return final; 
} 

इतना है कि यह प्रयोग करें:

var moo ={baz: 1, boo: 2, bar:{c1: 3, c2: 4, c3:{t:true, f:false, baz:1}},d: 11}; 
var foo = findMatchingObjects(moo, "baz", 1); 

// did it work? 
console.log(foo); 

वस्तु की एक सरणी देता है (या उप-ऑब्जेक्ट्स) जो सदस्य-मूल्य जोड़ी से मेल खाते हैं। इस मामले में, foo में moo और c3 दोनों शामिल हैं क्योंकि दोनों ऑब्जेक्ट्स में baz = 1 जोड़ी है।

फ़ंक्शन बनाना और jQuery चयनकर्ता की तरह महसूस करना सिंटैक्टिक चीनी का मामला है।

+0

मुझे कुछ भी इसी तरह से खटखटाया गया है, मैं बस इसे संशोधित करने की कोशिश कर रहा हूं ताकि मैं इसे चयनकर्ता वाक्यविन्यास के साथ jQuery में प्लग कर सकूं। हालांकि मैंने पहले कोई jQuery प्लगइन्स नहीं लिखा है, इसलिए मैं बस उसके चारों ओर अपने सिर को लपेटने की कोशिश कर रहा हूं। – BenAlabaster

संबंधित मुद्दे