সূচকের সূচকের মধ্যে পার্থক্য এবং অ্যারের ফাইন্ড ইন্ডেক্স ফাংশন


125

আমি দুটি ফাংশন সূচকের মধ্যে পার্থক্যের মধ্যে বিভ্রান্ত হয়েছি এবং সূচকে একটি অ্যারেতে খুঁজে পাই।

ডকুমেন্টেশন বলে

ফাইন্ড ইন্ডেক্স - অ্যারেতে প্রথম উপাদানটির সূচক ফেরত দেয় যেখানে প্রিডিকেট সত্য এবং অন্যথায় -1 হয়।

এবং

indexOf - একটি অ্যারেতে প্রথম মানের সংখ্যার সূচক ফেরত পাঠায়।


4
আমি মনে করি পার্থক্যটি হ'ল, একটি আর্গুমেন্ট হিসাবে একটি ক্রিয়া গ্রহণ করে (আরও পরিশীলিত সন্ধানগুলি সক্রিয় করে, যেমন আপনি কেবল পুরো মানটির পরিবর্তে কোনও নির্দিষ্ট সাবস্ট্রিং সহ কোনও মানটির প্রথম সন্ধানের সন্ধান করছিলেন), একজন কেবল আপনাকে মান দেয় ' আবার খুঁজছি এটি আসলে কোনও খারাপ প্রশ্ন নয়। ব্যাখ্যা ছাড়াই ডাউনভোটগুলি নিচে ভোট দিতে হবে।
টিম কনসোলজিও

কখনও কখনও ভাষা স্পেসিফিকেশন (অর্থাত্ ECMA-262) দিয়ে শুরু করা এবং অন্যান্য উপাদানের সাথে শূন্যস্থান পূরণ করা ভাল: অ্যারে.প্রোটোটাইপ.ইন্ডেক্সঅফ (অনুসন্ধানের উপাদান [, ইন্ডেক্স]] বনাম অ্যারে.প্রোটোটাইপ.ফাইন্ড ইন্ডেক্স (প্রিডিকেট [, এটিআরজি])
রবজি

ধন্যবাদ টিম এবং রবজি
রাহুল সিং

উত্তর:


195

প্রধান পার্থক্য হ'ল এই ফাংশনগুলির পরামিতি:

  • Array.prototype.indexOf()প্রথম পরামিতি হিসাবে একটি মান আশা করে । এটি আদিম ধরণের (যেমন স্ট্রিং, সংখ্যা বা বুলিয়ান) অ্যারেগুলিতে সূচকটি পাওয়া ভাল পছন্দ করে makes

  • 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ব্যাখ্যাটি সংশোধন করুন কেবলমাত্র "বা আপনার সন্ধানের পরিস্থিতি কেবলমাত্র একটি মান বা রেফারেন্সের চেয়ে জটিল" এটিকে সংশোধন করতে কারণ এটি আমাকে মূলত পথভ্রষ্ট করেছিল include ধন্যবাদ!
ব্রেক্টালার্মস

2
@ ব্রোকেনালার্মস এটি সত্য, তবে কেবল যদি আপনার অ্যারেতে কোনও আসল অবজেক্টের রেফারেন্স থাকে। উদাহরণস্বরূপ, [{a:1}].indexOf({a:1})আয় -1যদিও বস্তুর একই মনে করা হয় (কিন্তু তা না হয়)। এই তথ্য উত্তরের ক্ষেত্রে সহায়ক কিনা তা নিশ্চিত নয় কারণ এটি বিভ্রান্তিকর হতে পারে। আপনার যদি সঠিক ভাষার আচরণ সম্পর্কে আরও জানতে চান তবে আপনার স্পেসিফিকেশনটি পড়তে হবে।
29

তদুপরি, সূচিপত্র () অনুসন্ধানের উপাদানকে অ্যারের উপাদানগুলির সাথে কঠোর সাম্যতা (=== বা ট্রিপল-ইক্যুয়াল অপারেটর দ্বারা ব্যবহৃত একই পদ্ধতি) ব্যবহার করে তুলনা করে।
ইমিরজা

লক্ষণীয় তবে এটি .indexOf(NaN)সর্বদা ফিরে আসবে -1কারণ NaN==NaNসর্বদা falseNaN হয় একটি আদিম টাইপ কারণ typeof NaNহয় numberএবং তাই হয় nullএবং undefined, তাই আমি এই সংশোধন বলার অপেক্ষা রাখে না এড়াতে হবে indexOfআদিম ধরনের কাজ
ম্যাথু

13

ফাইন্ড ইন্ডেক্স দরকারী যদি আপনি আপনার উপাদানটির সাথে মেলে এমন প্রথম উপাদানটি খুঁজে পেতে চান: ডাব্লু 3 সি এর উদাহরণে, গ্রাহকের বয়স উপরে বা 18 এর সমান হলে সংখ্যা এবং মিল রয়েছে।

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

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

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

কনসোল:

2

আপনি অ্যারের সূচিপত্রের সূচকগুলির সাথে একটি সঠিক উপাদান সূচকটি পেতে পারেন তবে আপনি কোনও প্রাকটিকাকে পাস করতে পারবেন না। আপনি যদি একটি নির্দিষ্ট উপাদান খুঁজতে চান তবে এটি দ্রুত:

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

আয়:

1

সূচকের গণনা 0 থেকে শুরু হয়, সুতরাং প্রথম উপাদান সূচক 0 হয়।


4

প্রধান পার্থক্য হ'ল এই ফাংশনগুলির পরামিতি:

-> অ্যারে.প্রোটোটাইপ.ইন্ডেক্সঅফ () :

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

-> অ্যারে.প্রোটোটাইপ.ফাইন্ড ইন্ডেক্স () :

       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 এর জন্য একটি পলফিল প্রয়োজন
এমজেবি

indexOfপাশাপাশি অনেক দ্রুত।
ইওজি

4

আরেকটি পার্থক্য হ'ল ফাইন্ড ইন্ডেক্স () এর সাহায্যে ব্যবহারকারী কিছু ফাংশন প্রয়োগ করতে পারে এবং অ্যারেতে উপাদানটি পরীক্ষায় উত্তীর্ণ হতে পারে।

তবে একই সূচি সূচক () অপারেটরের ক্ষেত্রে নয়। একটি ব্যবহারকারী কেবল অ্যারের মধ্যে নির্দিষ্ট উপাদান বিদ্যমান কিনা তা পরীক্ষা করে দেখতে পারেন।


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)

আমি মনে করি না যে এই কোডটির কোনও ব্যাখ্যা দরকার কারণ এই কোডটি কোনও 'শিক্ষানবিস' এর জন্য খুব সহজ এবং সহজে বোঝার মতো দেখায়। এছাড়াও, যে সমস্ত ব্যক্তি সূচনাপ্রাপ্ত তারা জটিল কোড বুঝতে অসুবিধার মুখোমুখি হন তাই আমি এটিকে সহজ করে তুলেছি। সুতরাং দয়া করে আমার উদ্দেশ্য বুঝতে না পারলে এটি নিম্নমানের বলবেন না।
গুলশান বোরভূইয়া

আমি সিস্টেম দ্বারা চিহ্নিত নিম্নমানের কিছুই পাইনি।
গুলসান বোরভূইয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.