जावास्क्रिप्ट सरणी में है


152

मान लीजिए कि मेरे पास यह है:

var blockedTile = new Array("118", "67", "190", "43", "135", "520");

अधिक सरणी तत्व हैं, लेकिन वे पठनीय उद्देश्यों के लिए कम हैं। वैसे भी, मैं एक "के लिए" लूप कर सकता था, लेकिन यह 500 लूप हर बार करेगा जब आप नक्शे पर क्लिक करते हैं ... क्या कोई अन्य तरीका है यह देखने के लिए कि क्या एक निश्चित स्ट्रिंग एक सरणी में है?

जवाबों:


247

इसे इस्तेमाल करे:

if(blockedTile.indexOf("118") != -1)
{  
   // element found
}

24
यह पुराने ब्राउज़र (जैसे IE <9) के लिए काम नहीं करता है। इसके लिए एक jQuery फ़ंक्शन है: api.jquery.com/jQuery.inArray
Vinicius Pinto

5
एक तेज़ तरीका यह है कि बिट वार को फ्लिप किया जाए तो if(!!~blockedTile.indexOf('118))यह तरीका हमेशा सही रहेगा अगर परिणाम -1 और झूठा हो तो परिणाम === -1
bm_i

11
@bm_i कौन सा तेज ? टाइप करने के लिए तेज़?
एलेक्स

1
indexOf()शाब्दिक सरणियों पर भी लागू किया जा सकता है, उदाहरण के लिए if (-1 == [84, 116].indexOf(event.keyCode))। Chrome 37.0.2062.122 पर परीक्षण किया गया।
फ्रांस्वा

2
fwiw मैं हमेशा उपयोग करता हूं indexOf(…) >= 0। कोई फर्क नहीं पड़ता है और मैं भूल जाता हूं कि मैंने इसे एक आदत के रूप में कहां से उठाया था
JSDBroughton

49

जैसा कि पहले उल्लेख किया गया है, अगर आपका ब्राउज़र समर्थन करता है indexOf(), तो बढ़िया! यदि नहीं, तो आपको इसे पॉलीफ़िल करने या लॉटल / अंडरस्कोर जैसी उपयोगिता बेल्ट पर भरोसा करने की आवश्यकता है ।

बस इस नए ES2016 को जोड़ना चाहते थे (इस सवाल को अद्यतन रखने के लिए):

Array.prototype.includes ()

if (blockedTile.includes("118")) {
    // found element
}

12
function in_array(needle, haystack){
    var found = 0;
    for (var i=0, len=haystack.length;i<len;i++) {
        if (haystack[i] == needle) return i;
            found++;
    }
    return -1;
}
if(in_array("118",array)!= -1){
//is in array
}

2
ओपी को लूप नहीं चाहिए था
JNF

12

अंडरस्कोर का प्रयोग करें। js

यह क्रॉस-ब्राउज़र का अनुपालन करता है और यदि आपके डेटा को सॉर्ट किया जाता है तो एक बाइनरी खोज कर सकता है।

_।के सूचकांक

_.indexOf (सरणी, मान, [isSorted]) वह इंडेक्स लौटाता है जिस पर मान ऐरे में पाया जा सकता है, या -1 यदि मान एरे में मौजूद नहीं है। मूल अनुक्रमणिका फ़ंक्शन का उपयोग करता है जब तक कि यह गायब न हो। यदि आप बड़े सरणी के साथ काम कर रहे हैं, और आप जानते हैं कि सरणी पहले से ही सॉर्ट की गई है, तो तेजी से बाइनरी खोज का उपयोग करने के लिए isSorted के लिए सही पास करें।

उदाहरण

//Tell underscore your data is sorted (Binary Search)
if(_.indexOf(['2','3','4','5','6'], '4', true) != -1){
    alert('true');
}else{
    alert('false');   
}

//Unsorted data works to!
if(_.indexOf([2,3,6,9,5], 9) != -1){
    alert('true');
}else{
    alert('false');   
}

11

कुछ ब्राउज़र समर्थन करते हैं Array.indexOf()

यदि नहीं, तो आप इस Arrayतरह इसके प्रोटोटाइप के माध्यम से ऑब्जेक्ट को बढ़ा सकते हैं ...

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(searchElement /*, fromIndex */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (len === 0)
      return -1;

    var n = 0;
    if (arguments.length > 0)
    {
      n = Number(arguments[1]);
      if (n !== n) // shortcut for verifying if it's NaN
        n = 0;
      else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
    }

    if (n >= len)
      return -1;

    var k = n >= 0
          ? n
          : Math.max(len - Math.abs(n), 0);

    for (; k < len; k++)
    {
      if (k in t && t[k] === searchElement)
        return k;
    }
    return -1;
  };
}

स्रोत


क्या हम जावास्क्रिप्ट में '(ब्लॉक 118 में') का उपयोग नहीं कर सकते हैं?
प्रभात मिश्रा

1
@prabhatmishra केवल कुंजियों की जांच कर सकते हैं।
एलेक्स

9

बस अपने स्वाद के लिए उपयोग करें:

var blockedTile = [118, 67, 190, 43, 135, 520];

// includes (js)

if ( blockedTile.includes(118) ){
    console.log('Found with "includes"');
}

// indexOf (js)

if ( blockedTile.indexOf(67) !== -1 ){
    console.log('Found with "indexOf"');
}

// _.indexOf (Underscore library)

if ( _.indexOf(blockedTile, 43, true) ){
    console.log('Found with Underscore library "_.indexOf"');
}

// $.inArray (jQuery library)

if ( $.inArray(190, blockedTile) !== -1 ){
    console.log('Found with jQuery library "$.inArray"');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>



6

2019 में इसे करने का सबसे अच्छा तरीका है .includes()

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

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

यदि आपको यहां क्रॉसब्रोवी होने की आवश्यकता है - तो विरासत के बहुत सारे उत्तर हैं।


1
includesसमाधान में दोहराया गया है Kutyel (2016), Сергей Савельев (2017) और Krunal Limbad (2018) समान रूप से विस्तृत उदाहरण और संदर्भ के साथ जवाब ...
CPHPython

4

पहले से ही ऊपर वर्णित है, लेकिन साझा करना चाहता था।

हालांकि IE में काम नहीं करेगा। @Mahmoud का उल्लेख करने के लिए धन्यवाद

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

यहाँ कुछ संदर्भ मिला । वे भी ऊपर के लिए Polyfill है।


इसका इस्तेमाल करते समय सावधान रहें। Array.includes()ES7 (ECMAScript 2017) में पेश किया गया है और यह पुराने ब्राउज़रों के साथ काम नहीं करेगा। developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
uxcode

3

आपके द्वारा उपलब्ध जावास्क्रिप्ट के संस्करण के आधार पर, आप इसका उपयोग कर सकते हैं indexOf:

पहला इंडेक्स लौटाता है जिस पर किसी दिए गए तत्व को सरणी में पाया जा सकता है, या -1 मौजूद नहीं होने पर।

या some:

परीक्षण कि क्या सरणी में कुछ तत्व प्रदान किए गए फ़ंक्शन द्वारा कार्यान्वित परीक्षण से गुजरता है।

लेकिन, यदि आप इस प्रकार के अस्तित्व की जांच कर रहे हैं, तो आप अपने स्ट्रिंग्स (या शायद एक ऑब्जेक्ट के साथ-साथ आपके डेटा के साथ क्या कर रहे हैं, उसके आधार पर एक सरणी का संग्रह करने के लिए ऑब्जेक्ट का उपयोग करना बेहतर होगा)।


3

मुझे एक अलग डेटा संरचना का उपयोग करना चाहिए, क्योंकि सरणी सबसे अच्छा समाधान नहीं लगती है।

सरणी के बजाय, हैश-टेबल के रूप में किसी ऑब्जेक्ट का उपयोग करें, जैसे:

( jsbin में भी पोस्ट किया गया )

var arr = ["x", "y", "z"];
var map = {};
for (var k=0; k < arr.length; ++k) {
  map[arr[k]] = true;
}

function is_in_map(key) {
  try {
    return map[key] === true;
  } catch (e) {
    return false;
  }
}


function print_check(key) {
  console.log(key + " exists? - " + (is_in_map(key) ? "yes" : "no"));
}

print_check("x");
print_check("a");

कंसोल आउटपुट:

x exists? - yes
a exists? - no

इसका सीधा-सीधा हल है। यदि आप ऑब्जेक्ट ओरिएंटेड दृष्टिकोण में अधिक हैं, तो "js हैशटेबल" के लिए Google खोजें ।


3

पुराने ब्राउज़रों के साथ IMHO सबसे अधिक संगत है

Array.prototype.inArray = function( needle ){

    return Array(this).join(",").indexOf(needle) >-1;

}

var foods = ["Cheese","Onion","Pickle","Ham"];
test = foods.inArray("Lemon");
console.log( "Lemon is " + (test ? "" : "not ") + "in the list." );

CSV स्ट्रिंग में Array कॉपी को बदलकर, आप पुराने ब्राउज़र में स्ट्रिंग का परीक्षण कर सकते हैं।


3
यह गलत है अगर किसी भी सरणी सदस्य में सुई निहित है, लेकिन यह विशेष रूप से नहीं था। जैसे ['Lemon Pie'].inArray('Lemon')लौटेगा True। आप इसके ,चारों ओर पाने के लिए सुई को लपेट सकते हैं या इसी तरह करने के लिए रेगेक्स मिलान का उपयोग कर सकते हैं, लेकिन ,इसी तरह के झूठे-सकारात्मक कारणों ( |कहने) की तुलना में कुछ अधिक अस्पष्ट का उपयोग करके शामिल होना बेहतर होगा । यह डेटासेट पर निर्भर करता है
JSDBroughton

1

आप Array.filter का उपयोग क्यों नहीं करते?

var array = ['x','y','z'];
array.filter(function(item,index,array){return(item==YOURVAL)}).

बस इसे अपने कोड में कॉपी करें, और यहां आप जाएं:

Array.prototype.inArray = function (searchedVal) {
return this.filter(function(item,index,array){return(item==searchedVal)}).length==true
}

0

सरणी उदाहरण में, इसका php (in_array) में समान है

 var ur_fit = ["slim_fit", "tailored", "comfort"];
 var ur_length = ["length_short", "length_regular", "length_high"];
    if(ur_fit.indexOf(data_this)!=-1){
        alert("Value is avail in ur_fit array");
    }
    else if(ur_length.indexOf(data_this)!=-1){      
         alert("value is avail in ur_legth array"); 

    }

0
var myArray = [2,5,6,7,9,6];
myArray.includes(2) // is true
myArray.includes(14) // is false

4
कोड का एक टुकड़ा पोस्ट करना एक उत्तर नहीं है , आपको उसके शीर्ष पर स्पष्टीकरण जोड़ना चाहिए।
xoxel

1
हालांकि यह कोड स्निपेट समस्या को हल कर सकता है, यह इस बात की व्याख्या नहीं करता है कि यह प्रश्न का उत्तर क्यों या कैसे देता है। कृपया अपने कोड के लिए एक स्पष्टीकरण शामिल करें , क्योंकि यह वास्तव में आपके पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है। फ्लैगर्स / समीक्षक: कोड-ओनली उत्तरों जैसे कि यह एक, डाउनवोट, डिलीट न करें!
लुका कीबेल

उपयोग करने का सुझाव देने वाले पहले से ही कई उत्तर हैं includes। यह उत्तर उनकी तुलना में कोई अतिरिक्त मूल्य कैसे प्रदान करता है?
बोगीयन हॉफमैन

0

आप नीचे दिए गए कोड की कोशिश कर सकते हैं। Http://api.jquery.com/jquery.grep/ चेक करें

var blockedTile = new Array("118", "67", "190", "43", "135", "520");
var searchNumber = "11878";
arr = jQuery.grep(blockedTile, function( i ) {
  return i === searchNumber;
});
if(arr.length){ console.log('Present'); }else{ console.log('Not Present'); }

check arr.length अगर यह 0 से अधिक है तो इसका अर्थ है कि स्ट्रिंग मौजूद है और यह मौजूद नहीं है।


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