दिलचस्प पोस्ट
क्यों एक खाली घोषणा इंट आर्गुमेंट्स के साथ परिभाषाओं के लिए काम करती है, लेकिन फ्लोट तर्कों के लिए नहीं? एक्सेल पंक्तियों को पाठ फ़ाइलों की एक श्रृंखला में आउटपुट करना इंटेल सिंटैक्स में क्लैग के साथ असेंबली कोड कैसे तैयार करें? फोनगैप में टेक्स्ट चयन अक्षम करना बेस क्लास कन्स्ट्रक्टर से शुद्ध आभासी फ़ंक्शन पर कॉल करें cqlsh कनेक्शन त्रुटि: 'रेफरी () खोजशब्द तर्क' नकारात्मक सीएसएस चयनकर्ताओं java.lang.IllegalMonitorStateException: थ्रेड से ऑब्जेक्ट लॉक नहीं होने से पहले प्रतीक्षा करें ()? लॉगिंग के लिए एपेज के साथ एओपी का उपयोग कैसे करें? Backbone.js वास्तव में विशेषताओं को सेट नहीं करना चाहिए मैं एक फ़ाइल या निर्देशिका के लिए गिट शाखाओं को कैसे खोज सकता हूं? मैं एक mysql तालिका में कॉलम के आकार को कैसे संशोधित कर सकता हूँ? COUNT (*) बनाम COUNT (1) बनाम COUNT (पीके): जो बेहतर है? बिना एवल के "आराम से" JSON पार्सिंग सी ++ में मुख्य () में recurse क्या कानूनी है?

यह निर्धारित करने के लिए कि क्या जावास्क्रिप्ट सरणी में एक विशेषता है जो किसी दिए गए मान से बराबर है?

मेरे पास एक सरणी है

vendors = [ { Name: 'Magenic', ID: 'ABC' }, { Name: 'Microsoft', ID: 'DEF' } and so on... ]; 

मैनेनिक मौजूद है या नहीं यह देखने के लिए मैं इस सरणी को कैसे जांचूं? मुझे लूप नहीं करना है, जब तक कि मेरे पास नहीं है मैं संभावित रूप से एक दो हजार रिकॉर्ड के साथ काम कर रहा हूँ

UPDATED

चूंकि यह एक लोकप्रिय पोस्ट है, इसलिए मैंने सोचा कि मैं कुछ नया मिला हूं जो मैंने पाया था। और ऐसा लगता है CAFxX पहले से ही यह साझा किया है! मुझे यह अधिक बार पढ़ना चाहिए मैं https://benfrain.com/understanding-native-javascript-array-methods/ पर आया था।

 vendors.filter(function(vendor){ return vendor.Name === "Magenic" }); 

और ECMAScript 2015 के साथ यह नए तीर कार्यों का उपयोग करने में भी सरल है:

 vendors.filter(vendor => (vendor.Name === "Magenic")); 

Solutions Collecting From Web of "यह निर्धारित करने के लिए कि क्या जावास्क्रिप्ट सरणी में एक विशेषता है जो किसी दिए गए मान से बराबर है?"

लूप के बिना सरणी में कुछ की जांच करने के लिए कोई "जादू" तरीका नहीं है यहां तक ​​कि अगर आप कुछ फ़ंक्शन का उपयोग करते हैं, तो फ़ंक्शन केवल एक लूप का उपयोग करेगा। कम्प्यूटेशनल समय को कम करने के लिए जितनी जल्दी आप पाते हैं उतनी ही लूप से आप क्या कर सकते हैं।

 var found = false; for(var i = 0; i < vendors.length; i++) { if (vendors[i].Name == 'Magenic') { found = true; break; } } 

इस को फिर से संशोधित करने की आवश्यकता नहीं है पहिया लूप, कम से कम स्पष्ट रूप से नहीं:

 if (vendors.filter(function(e) e.name == 'Magenic').length > 0) { /* vendors contains the element we're looking for */ } 

या, बेहतर अभी तक:

 if (vendors.some(function(e) e.name == 'Magenic')) { /* vendors contains the element we're looking for */ } 

संपादित करें: यदि आपको घटिया ब्राउज़रों के साथ संगतता की आवश्यकता है तो आपकी सबसे अच्छी शर्त है:

 if (vendors.filter(function(e) { return e.name == 'Magenic'; }).length > 0) { /* vendors contains the element we're looking for */ } 

संपादित करें: तीर फ़ंक्शन का उपयोग करना (केवल आधुनिक ब्राउज़र)

 if (vendors.filter(e => e.name == 'Magenic').length > 0) { /* vendors contains the element we're looking for */ } 

स्वीकृत जवाब अभी भी काम करता है लेकिन अब हमारे पास एक ही प्रभाव प्राप्त करने के लिए एक ECMAScript 6 मूल विधि [Array.find][1] है।

एमडीएन का उद्धरण:

खोज () विधि सरणी में प्रथम तत्व का मान देता है जो प्रदान किए गए परीक्षण फ़ंक्शन को संतुष्ट करता है। अन्यथा अपरिभाषित लौटा है

 var arr = []; var item = { id: '21', step: 'step2', label: 'Banana', price: '19$' }; arr.push(item); /* note : data is the actual object that matched search criteria or undefined if nothing matched */ var data = arr.find( function( ele ) { return ele.id === '21'; } ); if( data ) { console.log( 'found' ); console.log(data); // This is entire object ie `item` not boolean } 

मेरे jsfiddle लिंक देखें मोज़िला द्वारा प्रदान की गई IE के लिए एक polyfill है

जब तक आप इसे इस तरह पुन: रचना नहीं करना चाहते हैं:

 vendors = { Magenic: { Name: 'Magenic', ID: 'ABC' }, Microsoft: { Name: 'Microsoft', ID: 'DEF' } and so on... }; 

जिस पर आप कर सकते हैं if(vendors.Magnetic)

आपको लूप करना होगा

आप वास्तव में इस वस्तु को देखे बिना नहीं कर सकते

शायद आपको अपनी संरचना थोड़ी बदलनी चाहिए, जैसे

 vendors = { Magenic: 'ABC', Microsoft: 'DEF' }; 

तो आप इसे केवल एक लुकअप-हैश की तरह उपयोग कर सकते हैं

 vendors['Microsoft']; // 'DEF' vendors['Apple']; // undefined 

कोई लूप आवश्यक नहीं है मन में आने वाली तीन विधियां:

Array.prototype.some ()

यह आपके प्रश्न के लिए सबसे सटीक उत्तर है, यानी "चेक अगर कुछ मौजूद है", जिसका अर्थ है एक बूल परिणाम यह सच हो जाएगा अगर कोई भी 'मैगनीक' वस्तुओं, अन्यथा झूठी हैं:

 let hasMagenicVendor = vendors.some( vendor => vendor['Name'] === 'Magenic' ) 

Array.prototype.filter ()

यह सभी 'Magenic' ऑब्जेक्ट की एक सरणी वापस करेगा, भले ही केवल एक है (एक तत्व तत्व वापस करेगा):

 let magenicVendors = vendors.filter( vendor => vendor['Name'] === 'Magenic' ) 

यदि आप इसे बुलियन में जबरदस्ती करने का प्रयास करते हैं, तो यह काम नहीं करेगा, क्योंकि एक खाली सरणी ('मैगनीक वस्तुओं') अभी भी सत्य है। तो बस अपने सशर्त में magenicVendors.length का उपयोग करें।

Array.prototype.find ()

यह पहले 'मैजेनिक' ऑब्जेक्ट वापस लौटाएगा (या यदि कोई न हो तो undefined ):

 let magenicVendor = vendors.find( vendor => vendor['Name'] === 'Magenic' ); 

यह बूलियन ठीक है (किसी भी ऑब्जेक्ट सच्चाई है, undefined फ़र्सी है)।


नोट: मैं विक्रेताओं के बजाय विक्रेता ["नाम"] का उपयोग कर रहा हूँ.नाम संपत्ति नामों के अजीब आवरण के कारण।

नोट 2: नाम की जांच करते समय कठोर समानता (===) के बजाय ढीले समानता (==) का उपयोग करने का कोई कारण नहीं है।

ECMAScript 6 विनिर्देश के अनुसार, आप findIndex उपयोग कर सकते हैं।

const magenicIndex = vendors.findIndex(vendor => vendor.Name === 'Magenic');

magenicIndex इंडेक्स 0 (यानी सरणी में सूचकांक) या -1 को पकड़ कर magenicIndex यदि यह नहीं मिला।

आपके पास लूप है, इसके चारों ओर कोई रास्ता नहीं है।

 function seekVendor(vendors, name) { for (var i=0, l=vendors.length; i<l; i++) { if (typeof vendors[i] == "object" && vendors[i].Name === name) { return vendors[i]; } } } 

बेशक, आप इसे पुस्तकालय जैसे linq.js का इस्तेमाल कर सकते हैं जिससे कि यह अधिक मनभावन हो:

 Enumerable.From(vendors).Where("$.Name == 'Magenic'").First(); 

(एक डेमो के लिए jsFiddle देखें)

मुझे संदेह है कि linq.js एक सीधी-अग्रेषित लूप से तेज़ हो जाएगा, लेकिन जब चीजें थोड़ा अधिक जटिल हो जाती हैं, तो निश्चित रूप से अधिक लचीली होती है

अगर आप jquery का उपयोग कर रहे हैं तो आप grep का लाभ उठा सकते हैं ताकि सभी मेल ऑब्जेक्ट्स के साथ सरणी बना सकें:

 var results = $.grep(vendors, function (e) { return e.Name == "Magenic"; }); 

और फिर परिणाम सरणी का उपयोग करें:

 for (var i=0, l=results.length; i<l; i++) { console.log(results[i].ID); } 

मैं बजाय regex के साथ जाना होगा

यदि आपका कोड निम्नानुसार है,

 vendors = [ { Name: 'Magenic', ID: 'ABC' }, { Name: 'Microsoft', ID: 'DEF' } ]; 

मैं सलाह दूँगा

 /"Name":"Magenic"/.test(JSON.stringify(vendors)) 

मुझे सही है अगर मैं गलत हूँ .. मैं इस तरह से forEach विधि के लिए इस्तेमाल कर सकता था,

 var found=false; vendors.forEach(function(item){ if(item.name === "name"){ found=true; return; } }); 

आजकल मैं इसका इस्तेमाल शीर्ष पर कर रहा हूँ, क्योंकि यह सादगी और आत्म व्याख्यात्मक शब्द है। धन्यवाद।