IndexOf और सरणी के findIndex फ़ंक्शन के बीच अंतर


125

मैं दो फ़ंक्शन इंडेक्सऑफ़ के बीच अंतर के बीच भ्रमित हूं और एक सरणी में सूचकांक ढूंढता हूं।

दस्तावेज कहता है

findIndex - सरणी में पहले तत्व का सूचकांक लौटाता है जहाँ विधेय सत्य है और -1।

तथा

indexOf - किसी ऐरे में किसी मान की पहली घटना का इंडेक्स लौटाता है।


4
मुझे लगता है कि अंतर यह है कि कोई एक फ़ंक्शन को एक तर्क के रूप में लेता है (अधिक परिष्कृत खोज को सक्षम करता है, जैसे आप कहते हैं कि आप केवल संपूर्ण मान के बजाय एक विशिष्ट सबस्ट्रिंग के साथ एक मूल्य की पहली घटना की तलाश कर रहे थे), एक बस आपको मान लेता है ' फिर से खोज रहे हैं यह वास्तव में एक बुरा सवाल नहीं है। बिना स्पष्टीकरण के डाउनवोट्स को डाउन-वोट करने योग्य होना चाहिए।
टिम कंसोलिओ

कभी-कभी भाषा विनिर्देश (यानी ECMA-262) के साथ शुरू करना और अन्य सामग्री के साथ अंतराल में भरना सबसे अच्छा है: Array.prototype.indexOf (searchElement [, fromIndex]) बनाम Array.prototype-findIndex (विधेय [, thisArg])
रॉबग

धन्यवाद टिम और RobG
राहुल सिंह

जवाबों:


195

मुख्य अंतर इन कार्यों के पैरामीटर हैं:

  • Array.prototype.indexOf()पहले पैरामीटर के रूप में एक मूल्य की उम्मीद है । यह आदिम प्रकार (जैसे स्ट्रिंग, संख्या, या बूलियन) के सरणियों में सूचकांक को खोजने के लिए एक अच्छा विकल्प बनाता है ।

  • Array.prototype.findIndex()पहले पैरामीटर के रूप में कॉलबैक की अपेक्षा करता है । यदि आपको गैर-आदिम प्रकार (जैसे ऑब्जेक्ट) के साथ सरणियों में सूचकांक की आवश्यकता है या आपकी खोज की स्थिति केवल मूल्य से अधिक जटिल है तो इसका उपयोग करें।

दोनों मामलों के उदाहरण के लिए लिंक देखें।


4
मामले में कोई भी सोच रहा है कि आदिम प्रकार क्या हैं, वे स्ट्रिंग, संख्या, बूलियन जैसी चीजें हैं।
जॉन ली

3
कृपया ध्यान दें कि indexOfवस्तुओं को खोजने के लिए काम करेगा। यह अंतर प्राप्त करना महत्वपूर्ण है कि यह एक वस्तु को स्वीकार करता है, न कि केवल एक मूल्य को, और समानता को तुलना करता है मूल्य नहीं। प्रति मोज़िला डॉक्स: indexOf() compares searchElement to elements of the Array using strict equality (the same method used by the === or triple-equals operator). कृपया findIndexस्पष्टीकरण में संशोधन करें, इसमें केवल "एक ही मूल्य या संदर्भ" की तुलना में "या आपकी खोज की स्थिति अधिक जटिल है, इसे ठीक करने के लिए यह मूल रूप से मुझे भटकाने का कारण बना। धन्यवाद!
टूटालाराम

2
@brokenalarms यह सच है, लेकिन केवल अगर आपके पास सरणी में एक वास्तविक वस्तु का संदर्भ है। उदाहरण के लिए, हालांकि [{a:1}].indexOf({a:1})रिटर्न -1एक ही प्रतीत होता है (लेकिन ऐसा नहीं है)। निश्चित नहीं है कि यह जानकारी उत्तर में सहायक है क्योंकि यह भ्रामक हो सकती है। यदि आपको सटीक भाषा व्यवहार के बारे में अधिक जानकारी प्राप्त करने की आवश्यकता है, तो आपको विनिर्देश पढ़ना चाहिए।
str

इसके अलावा, indexOf () सख्त समानता (=== या ट्रिपल-बराबर ऑपरेटर द्वारा उपयोग की जाने वाली समान विधि) का उपयोग करके एरे के तत्वों के लिए खोज की तुलना करता है।
इरिजा

वर्थ नोटिंग हालांकि जो .indexOf(NaN)हमेशा लौटेगा -1क्योंकि NaN==NaNहमेशा है falseNaN है एक आदिम प्रकार क्योंकि typeof NaNहै numberऔर इसलिए कर रहे हैं nullऔर undefined, इसलिए मैं इस संशोधन कह से बचने के लिए होगा indexOfआदिम प्रकार पर काम करता है
मैथ्यू

13

FindIndex उपयोगी है यदि आप पहला तत्व ढूंढना चाहते हैं जो आपके विधेय से मेल खाता है: W3C के उदाहरण में, संख्या और मिलान हैं यदि ग्राहक की उम्र 18 से ऊपर या बराबर है।

var ages = [3, 10, 18, 20];

function checkAdult(age) {
    return age >= 18;
}

console.log(ages.findIndex(checkAdult));

कंसोल:

2

आप ऐरे के indexOf फ़ंक्शन के साथ एक सटीक तत्व इंडेक्स पा सकते हैं, लेकिन आप एक विधेय पास नहीं कर सकते। यदि आप एक विशिष्ट तत्व ढूंढना चाहते हैं तो यह तेज़ है:

var ages = [3, 10, 18, 20];
console.log(ages.indexOf(10));

रिटर्न:

1

इंडेक्स काउंटिंग 0 से शुरू होती है, इसलिए पहला एलिमेंट इंडेक्स 0 है।


4

मुख्य अंतर इन कार्यों के पैरामीटर हैं:

-> Array.prototype.indexOf () :

   var fruits = ["Banana", "Orange", "Apple", "Mango"];
   var a = fruits.indexOf("Apple");
   The result of a will be: 2

-> Array.prototype.findIndex () :

       var ages = [3, 10, 18, 20];

       function checkAdult(age) {
        return age >= 18;
       }

       function myFunction() {
         document.getElementById("demo").innerHTML = 
         ages.findIndex(checkAdult);
       }

       The result will be: 2

4

आप यह भी उपयोग कर सकते हैं includes:

[1, 2, 3].includes(2);      // true
[1, 2, 3].includes(4);      // false
[1, 2, 3].includes(3, 3);   // false

लेकिन मुझे indexOfविधि पसंद है :

var vals = [ "foo", "bar", 42, "baz" ];
if (~vals.indexOf( 42 )) {
  // found it!
}

1
इसमें IE के लिए एक पॉलीफ़िल भी शामिल है
MJB

indexOfबहुत तेज है।
eozzy

4

एक और अंतर यह है कि findIndex () के साथ उपयोगकर्ता कुछ फ़ंक्शन को लागू कर सकता है और एरे में उस तत्व को खोज सकता है जो टेस्ट पास करता है।

लेकिन इंडेक्सऑफ () ऑपरेटर के साथ भी ऐसा ही नहीं है । उपयोगकर्ता केवल यह जांच सकता है कि सरणी में कोई विशेष तत्व मौजूद है या नहीं।


3

सरल - आप किस प्रकार की सरणी संरचना का उपयोग कर रहे हैं?

  • यदि वस्तुओं की सरणी findIndex();
  • और indexOf(),।

"मैं ऑरेंज" की कुंजी के साथ वस्तुओं की एक सरणी में सूचकांक ढूंढना चाहता हूं ।

let fruits = [
   { type: "Apple", quantity: 9 },
   { type: "Banana", quantity: 2},
   { type: "Orange", quantity: 8},
   { type: "Pear", quantity: 777}
];

let myIndex = fruits.findIndex(fruit => fruit.type === "Orange"); // Returns 2.

"मैं एक सरल सरणी में सूचकांक ढूंढना चाहता हूं "।

let fruits = [ "Apple", "Banana", "Pear", "Orange"];

let index = fruits.indexOf("Orange"); // Returns 3.

0

आप नीचे दिए गए कोड आज़मा सकते हैं: -

let city = ['Delhi', 'mumbai']
const a = city.findIndex((item) => 
item.toLowerCase()==='delhi')
console.log(a) // returns 0

let c = city.indexOf('mumbai') // returns 1
console.log(c)

मुझे नहीं लगता कि इस कोड को किसी भी स्पष्टीकरण की आवश्यकता है क्योंकि यह कोड एक 'शुरुआती' के लिए समझने में बहुत सरल और आसान लगता है। इसके अलावा, जो लोग शुरुआती हैं वे जटिल कोड को समझने में कठिनाई का सामना करते हैं इसलिए मैंने इसे सरल बना दिया। तो कृपया मेरे इरादे को समझे बिना इसे कम गुणवत्ता न कहें।
गुलशन बोरभूया

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