जावास्क्रिप्ट में एरे तत्व मौजूद है या नहीं, कैसे जांचें?


198

मैं टाइटेनियम के साथ काम कर रहा हूं, मेरा कोड इस तरह दिखता है:

var currentData = new Array();

if(currentData[index]!==""||currentData[index]!==null||currentData[index]!=='null')
{
    Ti.API.info("is exists  " + currentData[index]);
    return true;
}
else
{   
    return false;
}

मैं एक इंडेक्स को सरणी में पास कर रहा हूं currentData। मैं अभी भी उपरोक्त कोड का उपयोग करके एक गैर-मौजूदा तत्व का पता लगाने में सक्षम नहीं हूं।


1
आपका तर्क गलत है। आपको &&व्यक्तिगत स्थितियों के बीच संयोजन ( ) की आवश्यकता है ।
जेके

जवाबों:


381

उपयोग typeof arrayName[index] === 'undefined'

अर्थात

if(typeof arrayName[index] === 'undefined') {
    // does not exist
}
else {
    // does exist
}

4
+1, अच्छा। आप if(arrayName[index] === 'undefined')शॉर्टकट के रूप में भी उपयोग कर सकते हैं
AnchovyLegend

67
@AnchovyLegend नहीं, आप नहीं कर सकते! लेकिन आप उपयोग कर सकते हैं if(arrayName[index] === undefined)
डेनिस वी

18
यह विफल रहता है, अगर आइटम वहाँ है, लेकिन यह मूल्य अपरिभाषित है; इस उत्तर का उपयोग करें -> stackoverflow.com/questions/1098040/…
माटस

जैसा कि @ माटस ने कहा, यहां अधिक स्पष्टीकरण है , आपको इस बारे में पता होना चाहिए।
S.Thiongane

1
अगर (सरणी नाम [अनुक्रमणिका] === अपरिभाषित) आप कम से कम एक का उपयोग कर सकते हैं जो कि ((सरणी नाम [सूचकांक])
पार्क जोंगबम

84
var myArray = ["Banana", "Orange", "Apple", "Mango"];

if (myArray.indexOf(searchTerm) === -1) {
  console.log("element doesn't exist");
}
else {
  console.log("element found");
}

2
दुर्भाग्य से, यह एक IE 7 और नीचे में काम नहीं करता है।
डार्कसॉन्ग

4
यह मेरी राय में सबसे अच्छा जवाब है, अब तक IE 7 किसी भी अधिक mainteined नहीं है तो यह एक समस्या नहीं है। हालांकि मैं ट्रिपल बराबर का उपयोग करने का सुझाव दूंगाif(myArray.indexOf(searchTerm) === -1)
मौरो गावा

2
ओपी यह देखना चाह रहा था कि दिए गए इंडेक्स नंबर मौजूद हैं या नहीं। यह जाँच कर रहा है कि क्या दिया गया मान मौजूद है।
जोनाथन।

6

अगर कोई गलत है तो कृपया मुझे सही करें, लेकिन AFAIK निम्नलिखित सत्य है:

  1. जेएस के हुड के तहत एरर्स वास्तव में सिर्फ ऑब्जेक्ट हैं
  2. इस प्रकार, उनके पास प्रोटोटाइप विधि hasOwnProperty"विरासत में मिली" हैObject
  3. मेरे परीक्षण में, hasOwnPropertyयह जांच सकता है कि क्या कोई सरणी इंडेक्स में मौजूद है।

तो, जब तक ऊपर सच है, आप बस कर सकते हैं:

const arrayHasIndex = (array, index) => Array.isArray(array) && array.hasOwnProperty(index);

उपयोग:

arrayHasIndex([1,2,3,4],4); आउटपुट: false

arrayHasIndex([1,2,3,4],2); आउटपुट: true


यह एरे में अपरिभाषित और अशक्त मूल्यों के लिए भी काम करता है, जो यहां कोई अन्य उत्तर नहीं देता है।
जेक ठाकुर

एमडीएन से सत्यापित: "यदि एक वस्तु एक सरणी है, तो hasOwnProperty विधि यह जांच सकती है कि क्या कोई सूचकांक मौजूद है।" developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
लोरेन

3

मुझे Techfoobar के उत्तर को एक try.. catchब्लॉक में लपेटना था , जैसे:

try {
  if(typeof arrayName[index] == 'undefined') {
    // does not exist
  }
  else {
  // does exist
  }
} 
catch (error){ /* ignore */ }

... यह है कि यह कैसे क्रोम में काम किया, वैसे भी (अन्यथा, कोड एक त्रुटि के साथ बंद हो गया)।


यह केवल एक त्रुटि के साथ "टूटा हुआ" होना चाहिए अगर चर arrayNameस्वयं (या index) मौजूद नहीं था। बस एक अपरिभाषित सरणी तत्व तक पहुंचने के परिणामस्वरूप "त्रुटि" नहीं होनी चाहिए?
MrWhite

3

यदि सरणी के तत्व भी सरल वस्तु या सरणियाँ हैं, तो आप कुछ फ़ंक्शन का उपयोग कर सकते हैं :

// search object
var element = { item:'book', title:'javasrcipt'};

[{ item:'handbook', title:'c++'}, { item:'book', title:'javasrcipt'}].some(function(el){
    if( el.item === element.item && el.title === element.title ){
        return true; 
     } 
});

[['handbook', 'c++'], ['book', 'javasrcipt']].some(function(el){
    if(el[0] == element.item && el[1] == element.title){
        return true;
    }
});

someयहाँ के आसपास का सबसे आधुनिक तरीका है। यह भी एक लाइनर बन सकता है जैसेmyArray.some(el => el.item === element.item && el.title === element.title)
vahdet

2

सरणी पर विचार करें:

var a ={'name1':1, 'name2':2}

यदि आप यह जांचना चाहते हैं कि क्या 'name1' मौजूद है, तो बस इसके साथ परीक्षण करें in:

if('name1' in a){
console.log('name1 exists in a')
}else
console.log('name1 is not in a')

5
"var" आपके मामले में एक सरणी ऑब्जेक्ट नहीं है, बल्कि एक नियमित ऑब्जेक्ट है। Var a = […] होना चाहिए। मुझे लगता है कि यह लेखक की जरूरत है।
टोमज़ाहलिन

3
यह एक ऑब्जेक्ट में कुंजी के अस्तित्व की जांच करने के लिए है, न कि किसी सरणी में एक सूचकांक की उपस्थिति के लिए।
बेन हल


1

यदि तुम प्रयोग करते हो underscore.js का करते हैं तो लाइब्रेरी द्वारा इस प्रकार के अशक्त और अपरिभाषित चेक छिपे होते हैं।

तो आपका कोड इस तरह दिखेगा -

var currentData = new Array();

if (_.isEmpty(currentData)) return false;

Ti.API.info("is exists  " + currentData[index]);

return true;

यह अब बहुत अधिक पठनीय लगता है।


अगर आपका जवाब सही है, तो भी मैं इसके लिए सिर्फ दो बार सोचूंगा। आपका कोड केवल एक खाली मान की जाँच के लिए अंडरस्कोर .js निर्भर हो जाएगा। बस एक साधारण आवरण कार्य करना है (v) {वापसी (टाइपोफ़ v! == 'अपरिभाषित'); }
Heroselohim

1

आइटम की जांच करने का सरल तरीका मौजूद है या नहीं

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--)
       if (this[i] == obj)
       return true;
    return false;
}

var myArray= ["Banana", "Orange", "Apple", "Mango"];

myArray.contains("Apple")

3
बुरी तरह से अक्षम। अगर मैं सेट करता हूं myArray[1000000] = 'Pear'तो आपका कार्य हमेशा के लिए हो जाएगा।
जॉन हेन्केल 16

1

यह तरीका मेरी राय में सबसे आसान है।

var nameList = new Array('item1','item2','item3','item4');

// Using for loop to loop through each item to check if item exist.

for (var i = 0; i < nameList.length; i++) {
if (nameList[i] === 'item1') 
{   
   alert('Value exist');
}else{
   alert('Value doesn\'t exist');
}

और शायद यह करने का एक और तरीका है।

nameList.forEach(function(ItemList)
 {
   if(ItemList.name == 'item1')
        {
          alert('Item Exist');
        }
 }

1
var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(ArrayIndexValue in demoArray){
   //Array index exists
}else{
   //Array Index does not Exists
}

आप क्या उम्मीद कर रहे हैं .. वास्तव में क्या सवाल है?
गीकी

1

अगर आप इस तरह की किसी चीज की तलाश में हैं।

यहाँ निम्नलिखित स्निपेट्र है

var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(demoArray.includes(ArrayIndexValue)){
alert("value exists");
   //Array index exists
}else{
alert("does not exist");
   //Array Index does not Exists
}


आज मैं अपने प्रोजेक्ट का उपयोग करने जा रहा हूं यही समाधान है। मुझे पता नहीं है कि डाउनवोट्स क्यों थे - यह मेरे उपयोग के मामले के लिए सबसे अच्छा काम करता है, जो सर्वर-साइड नोड.जेएस / एक्सप्रेस है। धन्यवाद
mkrufky

@mkrufky क्योंकि यह सवाल यह नहीं है। हमारे पास लंबे समय से पहले Array.includesयह जांचने की क्षमता है कि क्या मूल्य एक सरणी है, जैसे demoArray.indexOf(ArrayIndexValue) !== -1। यह प्रश्न जाँचने के बारे में है कि क्या सूचकांक सरणी में मौजूद है, जो एक पूरी तरह से अलग समस्या है
r3wt

0

आप बस इसका उपयोग कर सकते हैं:

var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index]){
    console.log(tmp[index] + '\n');
}else{
    console.log(' does not exist');
}

3
गलत। अगर tmp = [0,0,0,0]तब tmp [3] मौजूद होना चाहिए
जॉन हेन्केल

0
(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

जाँच करें कि क्या सरणी में दूसरा आइटम उपयोग करने typeofऔर जाँच करने के लिए अपरिभाषित हैundefined


0

जब यह पता लगाने की कोशिश की जाती है कि जेएस में एक सरणी इंडेक्स मौजूद है या नहीं, तो सबसे आसान और छोटा तरीका दोहरे नकार के माध्यम से है।

let a = [];
a[1] = 'foo';
console.log(!!a[0])   // false
console.log(!!a[1])   // true

0

यह वही है जो inऑपरेटर के लिए है। इसे इस तरह उपयोग करें:

if (index in currentData) 
{ 
    Ti.API.info(index + " exists: " + currentData[index]);
}

स्वीकार किए जाते हैं जवाब गलत है, यह एक झूठी नकारात्मक दे देंगे अगर में मूल्य indexहै undefined:

const currentData = ['a', undefined], index = 1;

if (index in currentData) {
  console.info('exists');
}
// ...vs...
if (typeof currentData[index] !== 'undefined') {
  console.info('exists');
} else {
  console.info('does not exist'); // incorrect!
}


0
const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

अगर बूलियन अभिव्यक्ति

typeof arr[0] !== typeof undefined

सच है तो 0 गिरफ्तारी में निहित है


0

यह भी ठीक काम करता है, प्रकार के खिलाफ परीक्षण undefined

if (currentData[index] === undefined){return}

परीक्षा:

const fruits = ["Banana", "Orange", "Apple", "Mango"];

if (fruits["Raspberry"] === undefined){
  console.log("No Raspberry entry in fruits!")
}

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