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 ("परीक्षण", मायरे) सच है जब "परीक्षण" सरणी में है।

तो मेरा सवाल यह है कि ऐसा क्यों किया जाता है? मुझे यह वास्तव में नापसंद है। लेकिन ऐसा करने का एक अच्छा कारण होना चाहिए।

जवाबों:


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
धन्यवाद @ Chips_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 से अधिक है, न कि यह सच है या गलत है।

$ .InArray () विधि JavaScript के मूल .indexOf () पद्धति के समान है जिसमें यह -1 मिलता है जब यह एक मैच नहीं मिलता है। यदि सरणी में पहला तत्व मान से मेल खाता है, तो .inArray () रिटर्न 0 है।

क्योंकि जावास्क्रिप्ट 0 को झूठा के बराबर मानता है (यानी 0 == झूठा, लेकिन 0! == झूठा), अगर हम सरणी के भीतर मान की उपस्थिति के लिए जाँच कर रहे हैं, तो हमें यह जाँचने की ज़रूरत है कि क्या यह बराबर (या इससे अधिक) नहीं है? ) -1।


23

उपयोग करने का सही तरीका इसका उपयोग inArray(x, arr)बिल्कुल नहीं है , और इसके बजाय उपयोग करना है arr.indexOf(x)

आधिकारिक मानक नाम इस तथ्य पर भी अधिक स्पष्ट है कि लौटाया गया मूल्य एक सूचकांक है इस प्रकार यदि पारित किया गया तत्व पहला है जिसे आप वापस प्राप्त करेंगे 0(जो कि जावास्क्रिप्ट में गलत है)।

(ध्यान दें कि arr.indexOf(x)है IE9 जब तक इंटरनेट एक्सप्लोरर में समर्थित नहीं है, तो आप IE8 समर्थन करते हैं और पहले की जरूरत है, इस काम नहीं होगा, और jQuery समारोह के लिए एक बेहतर विकल्प है।)


1
मुझे सहमत होना होगा। ऐरे का नाम भ्रामक है। ऐसा लगता है कि यह एक बूलियन लौटना चाहिए, लेकिन यह बिल्कुल इंडेक्सऑफ के समान है
एनरिक मोरेनो टेंट

हर बार जब मैंने $.inArrayकुछ कोड की शुरुआत में इस्तेमाल किया तो मुझे बग को ठीक करना पड़ा, मैं कराह उठा। वैसे भी, यह स्वीकृत उत्तर होना चाहिए।
एलुआन हददाद

11

या यदि आप थोड़ा सा फैंसी प्राप्त करना चाहते हैं तो आप बिटवाइन नहीं (~) और लॉजिकल नॉट (!) ऑपरेटरों का उपयोग कर सकते हैं।

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

4
बिटकॉइन ऑपरेटरों का उपयोग आम तौर पर सामान्य जावास्क्रिप्ट कोडिंग मानकों में निषिद्ध / frowned है। इसलिए यदि आप एक लिंटर (jshint, eslint आदि) का उपयोग कर रहे हैं, तो संभावना है कि आपको कोड समीक्षा के माध्यम से यह नहीं मिलेगा। हालांकि समाधान काम करता है।
jrr

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 द्वारा समर्थित नहीं है - :: उपयोग indeOf
फ़ोल्डर

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()और जिस वस्तु के अस्तित्व के लिए आप सरणी की जाँच कर रहे हैं, उसके सूचकांक को उसी रूप में देखें। यह IE9 से पहले IE के पुराने संस्करणों के साथ संगत है। सबसे अच्छा विकल्प संभवतः उपयोग करना है 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 पुस्तकालय तक पहुंच है, तो यह सुनहरा मानक होना चाहिए। अन्यथा, .indexOfIE8 के लिए पॉलीफ़िल के साथ जावास्क्रिप्ट का उपयोग किया जाना चाहिए। जैसे कि आधुनिक सामान से दूर रहें .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
मिस्टीडॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.