jQuery.inArray (), কীভাবে এটি সঠিকভাবে ব্যবহার করবেন?


345

আমি প্রথমবারের সাথে কাজ করি jQuery.inArray()এবং এটি অদ্ভুত কাজ করে।

যদি বস্তু অ্যারেতে থাকে তবে এটি 0 ফেরত আসবে তবে জাভাস্ক্রিপ্টে 0 টি মিথ্যা। সুতরাং নিম্নলিখিতটি আউটপুট দেবে: "অ্যারে নেই"

var myarray = [];
myarray.push("test");

if(jQuery.inArray("test", myarray)) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}

আমাকে এই বিবৃতিটি এতে পরিবর্তন করতে হবে:

if(jQuery.inArray("test", myarray)==0)

তবে এটি কোডটি অপঠনযোগ্য করে তোলে। বিশেষত এমন কারও জন্য যারা এই ফাংশনটি জানেন না। তারা আশা করবে যে "পরীক্ষা" অ্যারেতে থাকলে jQuery.inArray ("পরীক্ষা", myarray) সত্য দেয়।

সুতরাং আমার প্রশ্ন, কেন এটি এভাবে করা হয়? আমি সত্যই এটি অপছন্দ করি। তবে এটির মতো করার জন্য অবশ্যই যুক্তিসঙ্গত কারণ থাকতে হবে।

উত্তর:


734

inArrayঅ্যারেতে উপাদানটির সূচকটি প্রদান করে, বুলিয়ান নয় যা অ্যারেতে আইটেমটি বিদ্যমান রয়েছে তা নির্দেশ করে। যদি উপাদানটি পাওয়া না যায় -1তবে ফিরে আসবে।

সুতরাং, কোনও আইটেমির অ্যারে রয়েছে কিনা তা পরীক্ষা করতে, ব্যবহার করুন:

if(jQuery.inArray("test", myarray) !== -1)

16
কফিস্ক্রিপ্ট:if jQuery.inArray('test', myarray) isn't -1
জোশুয়া পিন্টার

9
অবশ্যই, আপনি সর্বদা আপনার নিজস্ব, আরও স্বজ্ঞাত, ফাংশনটি সংজ্ঞায়িত করতে পারেন$.isInArray = function(test,array) { return $.inArray(test, array) !== -1; };
ওয়েসলি স্মিথ

1
বা আরও সংক্ষিপ্ত: $.isInArray = function(item, array) { return !!~$.inArray(item, array); };(উদ্দেশ্যটি পরিষ্কার রাখার জন্য আমি একটি নামকৃত কার্যক্রমে এর মতো ক্রিপ্টিক কোড রাখব :))
ডেনিস

2
কীভাবে এটি সঠিকভাবে করবেন তা আমাদের ভিজ্যুয়াল শিখরীদের দেখানোর জন্য @ চিপস_100 কে ধন্যবাদ, jQuery তাদের নিজস্ব উদাহরণে এটি অন্তর্ভুক্ত করতে আপডেট করতে পারলে ভাল লাগবে।
আশেরার্ড

2
আপনি এটিও ব্যবহার করতে পারেনif( $.inArray(test, array) > -1) { // do stuff }
মিস্টিডন

48

$.inArrayযদি পাওয়া যায় তবে উপাদানটির সূচক ফেরত দেয় বা -1 যদি তা পাওয়া যায় না - কোনও বুলিয়ান মান নয়। তাই সঠিক

if(jQuery.inArray("test", myarray) != -1) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
} 

26

উত্তর ডকুমেন্টেশনের প্রথম অনুচ্ছেদ থেকে আসে ফলাফলগুলি -1 এর চেয়ে বেশি হয় কিনা তা পরীক্ষা করে দেখুন, এটি সত্য বা মিথ্যা নয়।

In .inArray () পদ্ধতিটি জাভাস্ক্রিপ্টের নেটিভ .indexOf () পদ্ধতির মতো যা এটি কোনও ম্যাচ না পেয়ে যখন -1 ফেরায়। অ্যারের মধ্যে প্রথম উপাদানটি মানটির সাথে মিলে গেলে, in .inArray () 0 প্রদান করে।

যেহেতু জাভাস্ক্রিপ্ট 0 টি মিথ্যা (যেমন 0 == মিথ্যা, তবে 0! == মিথ্যা) এর সমান হিসাবে বিবেচনা করে, যদি আমরা অ্যারের মধ্যে মানের উপস্থিতি যাচাই করি, আমাদের এটি পরীক্ষা করতে হবে এটি সমান নয় (বা এর চেয়ে বড় ) -১।


23

ব্যবহারের সঠিক উপায়টি inArray(x, arr)একেবারে ব্যবহার না করা এবং পরিবর্তে ব্যবহার করা arr.indexOf(x)

অফিসিয়াল স্ট্যান্ডার্ড নামটি আরও স্পষ্ট যে এই ফেরত মানটি একটি সূচক হয় সুতরাং যদি পাস করা উপাদানটি প্রথম হয় তবে আপনি 0কোনওটি ফিরে পাবেন (এটি জাভাস্ক্রিপ্টে মিথ্যা)।

(নোট যে arr.indexOf(x)হয় IE9 পর্যন্ত Internet Explorer এ সমর্থিত নয় , তাই আপনি IE8 সমর্থন এবং তার আগে করার দরকার হয়, এই না করবে না কাজ, এবং jQuery ফাংশন একটি ভালো বিকল্প আছে।)


1
আমাকে একমত হতে হবে ইনআরয়ের নাম বিভ্রান্তিকর। দেখে মনে হচ্ছে এটি কোনও বুলেটিয়ান ফেরত পাঠানো উচিত তবে এটি সূচিপত্রের মতোই করে
এনরিক মোরেনো তাঁবু

আমি $.inArrayযখনই কোনও কোড শুরুর সময় ব্যবহার করতাম তখন আমাকে একটি বাগ ঠিক করতে হবে, আমি কাতর হই। যাইহোক, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
আলুয়ান হাদাদ

11

অথবা আপনি যদি কিছুটা অভিনবতা পেতে চান তবে বিটওয়াইস নট (~) এবং লজিক্যাল নয় (!) অপারেটরগুলি ইনআরাই ফাংশনটির ফলাফলকে বুলিয়ান মানতে রূপান্তর করতে ব্যবহার করতে পারেন।

if(!!~jQuery.inArray("test", myarray)) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}

4
বিটওয়াইজ অপারেটরগুলির ব্যবহারগুলি সাধারণ জাভাস্ক্রিপ্ট কোডিং মানগুলিতে সাধারণত নিষিদ্ধ / তিরস্কার করা হয়। সুতরাং আপনি যদি কোনও লিন্টার ব্যবহার করেন (jshint, eslint ইত্যাদি) সম্ভাবনাগুলি আপনি কোড পর্যালোচনার মাধ্যমে পাবেন না। সমাধান যদিও কাজ করে।
jhrr

8

আমি সাধারণত ব্যবহার করি

if(!(jQuery.inArray("test", myarray) < 0))

অথবা

if(jQuery.inArray("test", myarray) >= 0)

3
আরও ভাল ...if( $.inArray("test", myarray) > -1 )
মিস্টিডন

8

jQuery inArray () পদ্ধতিটি অ্যারেতে একটি মান সন্ধান করতে এবং তার সূচকটি বুলিয়ান মান না দিয়ে ফিরে আসে। এবং যদি মানটি না পাওয়া যায় তবে এটি -1 আসবে।

সুতরাং, কোনও অ্যারেতে কোনও মান উপস্থিত রয়েছে কিনা তা পরীক্ষা করতে নীচের অনুশীলনটি অনুসরণ করুন:

myArray = new Array("php", "tutor");
if( $.inArray("php", myArray) !== -1 ) {

    alert("found");
}

উল্লেখ


7

inArrayফাংশন বস্তুর অ্যারে ফাংশন দ্বিতীয় আর্গুমেন্ট হিসাবে সরবরাহকৃত ফাংশন প্রথম আর্গুমেন্ট হিসাবে সরবরাহকৃত সূচক ফেরৎ।

যখন inArrayরিটার্ন 0দেয় এটি ইঙ্গিত করে যে সরবরাহ করা অ্যারের প্রথম অবস্থানে প্রথম যুক্তিটি পাওয়া গেছে।

inArrayযদি একটি বিবৃতি ব্যবহার করে এর মধ্যে ব্যবহার করতে:

if(jQuery.inArray("test", myarray) != -1) {
    console.log("is in array");
} else {
    console.log("is NOT in array");
}

inArrayফাংশনটিতে -1প্রথম আর্গুমেন্টটি পাস হলে দ্বিতীয় আর্গুমেন্ট হিসাবে পাস করা অ্যারে পাওয়া যায় না।


5

ব্যবহারের পরিবর্তে jQuery.inArray()আপনি includesইন্টি অ্যারের জন্যও পদ্ধতি ব্যবহার করতে পারেন :

var array1 = [1, 2, 3];

console.log(array1.includes(2));
// expected output: true

var pets = ['cat', 'dog', 'bat'];

console.log(pets.includes('cat'));
// expected output: true

console.log(pets.includes('at'));
// expected output: false

অফিসিয়াল পোস্ট এখানে চেক করুন


1
অন্তর্ভুক্তগুলি IE দ্বারা সমর্থিত নয় - :: অনির্দিষ্ট ব্যবহার করুন
anoldermark

3

jQuery.inArray () অ্যারেতে আইটেমটির সূচক ফিরিয়ে দেয়, বা -1 যদি আইটেমটি পাওয়া যায় নি। এখানে আরও পড়ুন: jQuery.inArray ()


3

এটি অ্যারেতে আইটেমের সূচি ফিরিয়ে দেবে। যদি এটি না পাওয়া যায় তবে আপনি পাবেন-1


3

যদি আমরা কোনও উপাদান চেক করতে চান তবে উপাদানগুলির একটি সেটের মধ্যে রয়েছে উদাহরণস্বরূপ:

var checkboxes_checked = $('input[type="checkbox"]:checked');

// Whenever a checkbox or input text is changed
$('input[type="checkbox"], input[type="text"]').change(function() {
    // Checking if the element was an already checked checkbox
    if($.inArray( $(this)[0], checkboxes_checked) !== -1) {
        alert('this checkbox was already checked');
    }
}

2
/^(one|two|tree)$/i.test(field) // field = Two; // true
/^(one|two|tree)$/i.test(field) // field = six; // false
/^(раз|два|три)$/ui.test(field) // field = Три; // true

এটি গতিশীল ভেরিয়েবলগুলি পরীক্ষা করার জন্য দরকারী। এই পদ্ধতিটি পড়তে সহজ।


2

$.inArray()না সঠিক একই জিনিস যেমন myarray.indexOf()এবং আইটেমের আপনি অস্তিত্বের অ্যারের যাচাই করছি সূচী ফেরৎ। এটি আইই 9 এর পূর্বে আইই এর পূর্ববর্তী সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ। সম্ভবত সেরা পছন্দটি ব্যবহার করা myarray.includes()যা কোন বুলিয়ান সত্য / মিথ্যা মান দেয়। সমস্ত 3 পদ্ধতির আউটপুট উদাহরণগুলির জন্য নীচে স্নিপেট দেখুন।

// Declare the array and define it's values
var myarray = ['Cat', 'Dog', 'Fish'];

// Display the return value of each jQuery function 
// when a radio button is selected
$('input:radio').change( function() {

  // Get the value of the selected radio
  var selectedItem = $('input:radio[name=arrayItems]:checked').val();
  $('.item').text( selectedItem );
  
  // Calculate and display the index of the selected item
  $('#indexVal').text( myarray.indexOf(selectedItem) );
  
  // Calculate and display the $.inArray() value for the selected item
  $('#inArrVal').text( $.inArray(selectedItem, myarray) );
  
  // Calculate and display the .includes value for the selected item
  $('#includeVal').text( myarray.includes(selectedItem) );
});
#results { line-height: 1.8em; }
#resultLabels { width: 14em; display: inline-block; margin-left: 10px; float: left; }
label { margin-right: 1.5em; }
.space { margin-right: 1.5em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Click a radio button to display the output of
&nbsp;<code>$.inArray()</code>
&nbsp;vs. <code>myArray.indexOf()</code>
&nbsp;vs. <code>myarray.includes()</code>
&nbsp;when tested against
&nbsp;<code>myarray = ['Cat', 'Dog', 'Fish'];</code><br><br>

<label><input type="radio" name="arrayItems" value="Cat"> Cat</label>
<label><input type="radio" name="arrayItems" value="Dog"> Dog</label>
<label><input type="radio" name="arrayItems" value="Fish"> Fish</label>  
<label><input type="radio" name="arrayItems" value="N/A"> ← Not in Array</label>
<br><br>

<div id="results">
  <strong>Results:</strong><br>
  <div id="resultLabels">
    myarray.indexOf( "<span class="item">item</span>" )<br>
    $.inArray( "<span class="item">item</span>", myarray )<br>
    myarray.includes( "<span class="item">item</span>" )
  </div>
  <div id="resultOutputs">
    <span class="space">=</span><span id="indexVal"></span><br>
    <span class="space">=</span><span id="inArrVal"></span><br>
    <span class="space">=</span><span id="includeVal"></span>
  </div>
 </div>


এটি লক্ষ করা $.inArrayউচিত যে আপনার যদি jQuery লাইব্রেরিতে অ্যাক্সেস থাকে তবে এটি সোনার মান হওয়া উচিত। অন্যথায়, এর .indexOfপরিবর্তে আইই 8 এর জন্য একটি পলিফিল সহ জাভাস্ক্রিপ্ট ব্যবহার করা উচিত। আধুনিক জিনিসগুলি থেকে দূরে থাকুন .includes()
আলেকজান্ডার ডিকসন


1

কোনও কারণে আপনি যখন একটি jquery DOM উপাদান পরীক্ষা করার চেষ্টা করবেন এটি সঠিকভাবে কাজ করবে না। সুতরাং ফাংশনটি পুনরায় লেখাই কৌতুকটি করবে:

function isObjectInArray(array,obj){
    for(var i = 0; i < array.length; i++) {
        if($(obj).is(array[i])) {
            return i;
        }
    }
    return -1;
}

1

var abc = {
      "partner": {
        "name": "North East & Cumbria (EDT)",
        "number": "01915008717",
        "areas": {
        "authority": ["Allerdale", "Barrow-in-Furness", "Carlisle"]
        }
      }
    };
    
    
    $.each(abc.partner.areas, function(key, val){
     console.log(val);
      if(jQuery.inArray("Carlisle", val)) {
        console.log(abc.partner.number);
    }
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


0

এর $পরিবর্তে কেউ ব্যবহার করবেন না jQuery:

if ($.inArray(nearest.node.name, array)>=0){
   console.log("is in array");
}else{
   console.log("is not in array");
}

আমি শুধু কৌতুহলী কেন? কিছু অস্বাভাবিক সামঞ্জস্য সমস্যা যার কারণ রয়েছে? আমি ব্যবহার ইস্যু যে কোন ধরণের ছিল না থাকেন $পরিবর্তে jQuery
মিস্টিডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.