मैं वस्तु tha के सूचकांक को एक शर्त (सरणी के साथ पुनरावृत्ति के बिना) कैसे प्राप्त कर सकता हूं?
आप नहीं कर सकते, कुछ को सरणी के माध्यम से पुनरावृत्त करना है (कम से कम एक बार)।
यदि स्थिति बहुत बदल जाती है, तो आपको लूप के माध्यम से देखना होगा और उसमें मौजूद वस्तुओं को देखना होगा कि क्या वे स्थिति से मेल खाते हैं। हालांकि, ES5 सुविधाओं के साथ एक प्रणाली पर (या यदि आप एक शिम स्थापित करते हैं), कि पुनरावृत्ति काफी संक्षिप्त रूप से की जा सकती है:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
वह नए (ईश) Array#some
फ़ंक्शन का उपयोग करता है , जो उस ऐरे में प्रविष्टियों के माध्यम से लूप करता है जब तक कि फ़ंक्शन आपको इसे सही नहीं देता। मैंने जो फ़ंक्शन दिया है वह मिलान प्रविष्टि के सूचकांक को बचाता है, फिर true
पुनरावृति को रोकने के लिए वापस लौटता है।
या बेशक, बस एक for
लूप का उपयोग करें । आपके विभिन्न पुनरावृत्ति विकल्प इस अन्य उत्तर में शामिल हैं ।
लेकिन यदि आप हमेशा इस लुकअप के लिए समान प्रॉपर्टी का उपयोग करते हैं, और यदि प्रॉपर्टी वैल्यू अद्वितीय हैं, तो आप सिर्फ एक बार लूप कर सकते हैं और उन्हें मैप करने के लिए ऑब्जेक्ट बना सकते हैं:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(या, फिर से, आप एक for
लूप या अपने किसी अन्य विकल्प का उपयोग कर सकते हैं ।)
फिर अगर आपको इसके साथ प्रविष्टि खोजने की आवश्यकता है prop2 = "yutu"
, तो आप यह कर सकते हैं:
var entry = prop2map["yutu"];
मैं इसे "क्रॉस-इंडेक्सिंग" सरणी कहता हूं। स्वाभाविक रूप से, यदि आप प्रविष्टियाँ हटाते हैं या जोड़ते हैं (या उनके prop2
मान बदलते हैं), तो आपको अपनी मैपिंग ऑब्जेक्ट को भी अपडेट करना होगा।
0
?)। दोनों समाधान आवश्यकता से अधिक पुनरावृत्ति करते हैं, जो कि आदर्श से कम है यदि सरणी बड़ी है (हालांकि इसे इतना बड़ा होने की संभावना मानव को कम दिखाई देगी, जब तक कि लुकअप बहुत अधिक नहीं हो रहा है )।