मान के साथ सरणी इंडेक्स कैसे खोजें?


199

कहो कि मुझे यह मिल गया है

imageList = [100,200,300,400,500];

जो मुझे देता है

[0]100 [1]200 आदि।

क्या मूल्य के साथ सूचकांक को वापस करने के लिए जावास्क्रिप्ट में कोई रास्ता है?

यानी मैं 200 के लिए सूचकांक चाहता हूं , मुझे 1 वापस मिलता है ।


5
यहाँ उत्कृष्ट उत्तर -> stackoverflow.com/questions/237104/…
पर्स

जवाबों:


316

आप उपयोग कर सकते हैं indexOf:

var imageList = [100,200,300,400,500];
var index = imageList.indexOf(200); // 1

यदि आपको एरे में मान नहीं मिल रहा है तो आपको -1 मिलेगा।


2
इसे ठीक करने के लिए आप developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… या किसी भी जावास्क्रिप्ट फ्रेमवर्क का उपयोग कर सकते हैं ।
वायगटन

1
अभी पाया है यह IE8 में काम नहीं करेगा। मेरा विकल्प क्या है?
joedborg

@voigtan मैं इसे अपने JS में कैसे जोड़ूँ?
जॉयबॉर्ग

5
मैंने किया है, धन्यवाद। IE एक दिन आधुनिक समय के साथ पकड़ जाएगा!
14

संगतता मोड में भी हाल ही में IE में काम नहीं करेंगे
pelms

74

के लिए सरणी वस्तुओं उपयोग mapके साथ indexOf:

var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.map(function (img) { return img.value; }).indexOf(200);

console.log(index);


आधुनिक ब्राउज़रों में आप उपयोग कर सकते हैं findIndex:

var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.findIndex(img => img.value === 200);

console.log(index);

ईएस 6 का इसका हिस्सा और क्रोम, एफएफ, सफारी और एज द्वारा समर्थित है


1
ध्यान दें कि findIndex IE 11
Bindrid

2
@ बाइंड्रीड के उत्तर में लिखा है, "इसके ES6 का हिस्सा और क्रोम, FF, सफारी और (दुर्भाग्यवश केवल IE IE एज) द्वारा समर्थित
जेकेन एचघर

17

JQuery के फ़ंक्शन का उपयोग करें jQuery.inArray

jQuery.inArray( value, array [, fromIndex ] )
(or) $.inArray( value, array [, fromIndex ] )

सही उत्तर के रूप में चिह्नित कोड का उपयोग करने जा रहा था, लेकिन ऐसा लगता है कि कोड IE के सभी संस्करणों में काम नहीं करेगा। यह उत्तर IE के सभी संस्करणों में काम करता है, लेकिन मैंने कोड को थोड़ा बदल दिया: var arrayPosition = $ .inArray (मान, एरे); पूरी तरह से काम करता है
जेम्स ब्लैकबर्न


13

यहां जावास्क्रिप्ट में जटिल सरणी में एक और तरीका है मूल्य सूचकांक खोजें। आशा है कि वास्तव में किसी की मदद करो। मान लें कि हमारे पास निम्नलिखित के रूप में एक जावास्क्रिप्ट सरणी है,

var studentsArray =
     [
    {
    "rollnumber": 1,
    "name": "dj",
    "subject": "physics"
   },
   {
   "rollnumber": 2,
  "name": "tanmay",
  "subject": "biology"
   },
  {
   "rollnumber": 3,
   "name": "amit",
   "subject": "chemistry"
   },
  ];

अब अगर हमें सरणी में किसी विशेष ऑब्जेक्ट का चयन करने की आवश्यकता है। आइए हम मान लें कि हम तन्मय नाम के साथ छात्र का सूचकांक ढूंढना चाहते हैं।

हम सरणी के माध्यम से पुनरावृत्ति करके और दिए गए कुंजी पर मूल्य की तुलना करके ऐसा कर सकते हैं।

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

    for (var i = 0; i < arraytosearch.length; i++) {

    if (arraytosearch[i][key] == valuetosearch) {
    return i;
    }
    }
    return null;
    }

आप फ़ंक्शन का उपयोग नीचे दिए गए किसी विशेष तत्व के सूचकांक को खोजने के लिए कर सकते हैं,

var index = functiontofindIndexByKeyValue(studentsArray, "name", "tanmay");
alert(index);



6

Array.indexOfइंटरनेट एक्सप्लोरर के कुछ संस्करणों में काम नहीं करता है - हालांकि इसे करने के कई वैकल्पिक तरीके हैं ... इस प्रश्न / उत्तर को देखें: यदि कोई सरणी जावास्क्रिप्ट में ऑब्जेक्ट शामिल करता है तो मैं कैसे जांच सकता हूं?


इस पृष्ठ के अनुसार developer.mozilla.org/en-US/docs/JavaScript/Reference/… इस सुविधा के लिए आपको इंटरनेट एक्सप्लोरर 9 की आवश्यकता है (मुझे लगभग गलत तरीके से माना गया था कि हम यहां IE 6 से बात कर रहे थे)
Simon_Weaver

@Simon_Weaver उस पृष्ठ पर जहां आपने लिंक किया है, जावास्क्रिप्ट 1.6 और बाद वाले सभी ब्राउज़रों के लिए एक पॉलीफ़िल है
Manse

5

जब सूचियां बहुत लंबी नहीं होती हैं, तो मुझे पता है कि यह सबसे अच्छा तरीका है:

function getIndex(val) {
    for (var i = 0; i < imageList.length; i++) {
        if (imageList[i] === val) {
            return i;
        }
    }
}

var imageList = [100, 200, 300, 400, 500];
var index = getIndex(200);

5

एक ES6फ़ंक्शन का उपयोग करना संभव है Array.prototype.findIndex

एमडीएन कहता है :

findIndex()विधि के सूचकांक रिटर्न सरणी में पहला तत्व है कि संतुष्ट परीक्षण समारोह प्रदान की है। अन्यथा -1 वापस कर दिया जाता है।

var fooArray = [5, 10, 15, 20, 25];
console.log(fooArray.findIndex(num=> { return num > 5; }));

// expected output: 1

ऑब्जेक्ट प्रॉपर्टी द्वारा एक इंडेक्स खोजें।

ऑब्जेक्ट प्रॉपर्टी द्वारा इंडेक्स खोजने के लिए:

yourArray.findIndex(obj => obj['propertyName'] === yourValue)

उदाहरण के लिए, ऐसी एक सरणी है:

let someArray = [
    { property: 'OutDate' },
    { property: 'BeginDate'},
    { property: 'CarNumber' },
    { property: 'FirstName'}
];

फिर, आवश्यक संपत्ति का एक सूचकांक खोजने के लिए कोड इस तरह दिखता है:

let carIndex = someArray.findIndex( filterCarObj=> 
    filterCarObj['property'] === 'CarNumber');

0

यहाँ इस पर मेरा विचार है, ऐसा लगता है कि अधिकांश लोग समाधान की जाँच नहीं करते हैं कि क्या आइटम मौजूद है और यदि यह मौजूद नहीं है तो यह यादृच्छिक मूल्यों को हटा देता है।

पहले यह जांचें कि क्या तत्व इंडेक्स की तलाश में मौजूद है । यदि यह मौजूद है, तो इसे स्पाइस विधि का उपयोग करके इसके सूचकांक से हटा दें

elementPosition = array.indexOf(value);

if(elementPosition != -1) {
  array.splice(elementPosition, 1);
}

0

एक बहुआयामी सरणी में


संदर्भ सरणी:

var array = [
    { ID: '100', },
    { ID: '200', },
    { ID: '300', },
    { ID: '400', },
    { ID: '500', }
];

उपयोग करना filterऔर indexOf:

var in_array = array.filter(function(item) { 
    return item.ID == '200' // look for the item where ID is equal to value
});
var index = array.indexOf(in_array[0]);

सरणी में प्रत्येक आइटम के माध्यम से लूपिंग indexOf:

for (var i = 0; i < array.length; i++) {
    var item= array[i];
    if (item.ID == '200') { 
        var index = array.indexOf(item);
    }
}

-1
// Instead Of 
var index = arr.indexOf(200)

// Use 
var index = arr.includes(200);

कृपया ध्यान दें : फ़ंक्शन में सरणी पर एक सरल उदाहरण विधि शामिल है और यह आसानी से पता लगाने में मदद करता है कि कोई आइटम सरणी में है (अनुक्रमणिका के विपरीत NaN सहित)


1
केवल यह बताने के अलावा कि यदि यह मौजूद है, तो इंडेक्स / आइटम प्राप्त करने के बजाय, संगतता का संज्ञानात्मक
moto

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