जांचें कि कोई सरणी खाली है या मौजूद है


358

जब पृष्ठ पहली बार लोड हो रहा है, तो मुझे यह जांचने की आवश्यकता है कि क्या कोई छवि है image_arrayऔर अंतिम छवि लोड है।

अन्यथा, मैं पूर्वावलोकन बटन अक्षम करता हूं, उपयोगकर्ता को नई छवि बटन पुश करने और छवियों को डालने के लिए एक खाली सरणी बनाने के लिए सतर्क करता हूं;

समस्या यह है कि है image_arrayमें elseआग हर समय। यदि कोई सरणी मौजूद है - यह बस इसे ओवरराइड करता है, लेकिन अलर्ट काम नहीं करता है।

if(image_array.length > 0)
    $('#images').append('<img src="'+image_array[image_array.length-1]+'" class="images" id="1" />');
else{
    $('#prev_image').attr('disabled', 'true');
    $('#next_image').attr('disabled', 'true');
    alert('Please get new image');
    var image_array = [];
}

UPDATE html लोड करने से पहले, मेरे पास कुछ इस तरह है:

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>

कंसोल लॉग image_array- आपको क्या मिलता है?
उत्तानोस

@ यूटैंकोज़ अगर var image_array = [] है - अपरिभाषित है तो // var image_array = [] (comented) - वास्तविक सरणी।
user1564141

सरणी .length - व्यापक रूप से समर्थित है और जल्द ही एक देशी विशेषता होगी
Anbu अग्रवाल

जवाबों:


516
if (typeof image_array !== 'undefined' && image_array.length > 0) {
    // the array is defined and has at least one element
}

अंतर्निहित वैश्विक चर और चर उत्थापन के मिश्रण के कारण आपकी समस्या हो सकती है। varजब भी आप वैरिएबल की घोषणा कर रहे हों, तो सुनिश्चित करें :

<?php echo "var image_array = ".json_encode($images);?>
// add var  ^^^ here

और फिर सुनिश्चित करें कि आपने कभी भी उस चर को बाद में दोबारा नहीं लिया है:

else {
    ...
    image_array = []; // no var here
}

33
नहीं। यह तब विस्फोट होगा जब image_array शून्य है। मर्फी का नियम कहता है कि किसी दिन यह होगा।
मार्को फाउस्टीनली

7
image_array.lengthपर्याप्त नहीं है? (बिना निर्दिष्ट किए >0)
mcont

जिज्ञासु: क्या आप @JamesDrinkard के उत्तर का उपयोग करके कोई भी उपयोग का मामला ढूंढ सकते हैं?
tsemer

11
if (image_array && image_array.length){ // array exists and has elements
1892 में YeeHaw1234

195

यह जाँचने के लिए कि कोई सरणी खाली है या नहीं

एक आधुनिक तरीका, ES5 +:

if (Array.isArray(array) && array.length) {
    // array exists and is not empty
}

एक पुराना स्कूल तरीका:

typeof array != "undefined"
    && array != null
    && array.length != null
    && array.length > 0

एक कॉम्पैक्ट तरीका:

if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
    // array exists and is not empty
}

एक कॉफीस्क्रिप्ट तरीका:

if array?.length > 0

क्यों?

मामला अपरिभाषित
अपरिभाषित चर वह चर है जिसे आपने अभी तक कुछ भी नहीं सौंपा है।

let array = new Array();     // "array" !== "array"
typeof array == "undefined"; // => true

केस नल
आम तौर पर बोलना, अशक्त मूल्य का अभाव है। उदाहरण के लिए एक चर शून्य है जब आप चूक गए या कुछ डेटा को पुनः प्राप्त करने में विफल रहे।

array = searchData();  // can't find anything
array == null;         // => true

केस नॉट
अरेज जावास्क्रिप्ट में डायनामिक टाइप सिस्टम है। इसका मतलब है कि हम इस बात की गारंटी नहीं दे सकते कि एक चर किस प्रकार की वस्तु है। एक मौका है कि हम एक उदाहरण के लिए बात नहीं कर रहे हैं Array

supposedToBeArray =  new SomeObject();
typeof supposedToBeArray.length;       // => "undefined"

array = new Array();
typeof array.length;                   // => "number"

मामला खाली होने के
बाद अब जब हमने अन्य सभी संभावनाओं का परीक्षण किया है, हम एक उदाहरण से बात कर रहे हैं Array। यह सुनिश्चित करने के लिए कि यह खाली नहीं है, हम इसे पकड़े हुए तत्वों की संख्या के बारे में पूछते हैं, और यह सुनिश्चित करते हैं कि इसमें शून्य से अधिक तत्व हैं।

firstArray = [];
firstArray.length > 0;  // => false

secondArray = [1,2,3];
secondArray.length > 0; // => true

8
कृपया ध्यान दें कि केवल जाँच करना ही पर्याप्त नहीं है(typeof array != "undefined" && array.length > 0) क्योंकि यदि arrayहम अशक्त हो जाएंगे TypeError: Cannot read property 'length' of null
पूजन खोसरावी

हो सकता है के साथ बदलें && ||
सहार चौ।

!(typeof array !== "undefined") || !(array.length > 0)? बस कोशिश की, वही त्रुटि मिली। क्या आप हमें इसका पूरा उदाहरण दे सकते हैं कि कैसे उपयोग करें ||?
पोयनन खोसरावी

मेरा मतलब था(typeof array != "undefined" || array.length > 0)
सहर च।

स्पष्टीकरण के लिए धन्यवाद। अगर (typeof array != "undefined" || array.length > 0)लौटता trueहै array = null। अगर !(typeof array != "undefined" || array.length > 0)लौटता falseहै array = [1,2]। समझ नहीं पाने के लिए क्षमा करें, लेकिन @Elsa क्या आप एक कार्यशील उदाहरण प्रदान कर सकते हैं? अग्रिम में धन्यवाद।
पूयण खोसरावी

70

कैसे (ECMA 5.1) के बारे में:

if(Array.isArray(image_array) && image_array.length){
  // array exists and is not empty
}

1
फिर से .. && image_array.length)। IMHO, जबकि आप सुरक्षित रूप से JS के ढीले-टाइपिंग पर भरोसा कर सकते हैं, एक 0पूर्णांक को falseऔर एक non-zeroपूर्णांक को रूपांतरित करने के लिए true, मैं इसे भविष्य में पठनीयता के लिए, "कहने का मतलब है कि आप क्या मतलब है" के लिए बेहतर मानते हैं। मैं करता .. && image_array.length > 0)
टूलमेकरसेव

28

यही है वह जो मेरे द्वारा उपयोग किया जाता है। पहली शर्त में सत्यता शामिल है, जिसमें अशक्त और अपरिभाषित दोनों हैं। एक खाली सरणी के लिए दूसरी स्थिति की जाँच।

if(arrayName && arrayName.length > 0){
    //do something.
}

या tsemer की टिप्पणी के लिए धन्यवाद मैंने एक दूसरा संस्करण जोड़ा

if(arrayName && arrayName.length)

फिर मैंने फ़ायरफ़ॉक्स में स्क्रैचपैड का उपयोग करते हुए दूसरी स्थिति के लिए एक परीक्षण किया:

var array1;
var array2 = [];
var array3 = ["one", "two", "three"];
var array4 = null;

console.log(array1);
console.log(array2);
console.log(array3);
console.log(array4);

if (array1 && array1.length) {
  console.log("array1! has a value!");
}

if (array2 && array2.length) {
  console.log("array2! has a value!");
}

if (array3 && array3.length) {
  console.log("array3! has a value!");
}

if (array4 && array4.length) {
  console.log("array4! has a value!");
}

जो साबित भी करता है if(array2 && array2.length)और if(array2 && array2.length > 0)ठीक वैसा ही कर रहा है


13
मुझे यह सबसे संक्षिप्त लगता है और सभी अपवाद मुद्दों को शामिल करता है। और जब से आप if (arrayName && arrayName.length)
सत्यता

2
लघु और शीघ्र! C # से आने में मुझे कुछ समय लगा जब मैं (obj) नल की जाँच करने के लिए अभ्यस्त हो गया था, लेकिन अब मुझे यह पसंद है: if (obj) // null check; if (array && array.length) // array null या खाली चेक; अगर (सरणी &&; array.length) // सरणी मौजूद है, लेकिन खाली चेक; if (str) // string null नहीं और खाली नहीं है। यदि एक वैध संख्या है, तो केवल गोचा का उपयोग नंबरों पर नहीं किया जाता है।
रिक लव

1
मैं थोड़ी देर के लिए (arrayName && arrayName.length) का उपयोग कर रहा था, तब मुझे चिंता हुई कि क्या इसके बारे में कुछ गलत हो सकता है। इस उत्तर ने मुझे सुकून दिया, धन्यवाद :)
कोरे

टाइपस्क्रिप्ट में, बारीकियां हैं, जैसे कि var arrayName = undefined; var isNotEmpty = arrayName && array.length > 0टाइप के लिए isNotEmpty बूलियन नहीं होगा, यह बूलियन होगा। अपरिभाषित।
गिदरीस


8

यदि आप परीक्षण करना चाहते हैं कि क्या छवि सरणी चर परिभाषित किया गया था तो आप इसे इस तरह से कर सकते हैं

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}

काम नहीं कर रहा dl.dropbox.com/u/14396564/screens/...
user1564141

@ user1564141 यह बताने में कठिन है कि आपके इमेज_रे के सेट होने के बाद फ़ंक्शन को कहां घोषित किया जा रहा है। आपके पास एक होस्टिंग समस्या हो सकती है, इसलिए आपको उस चर को var index_array = के रूप में घोषित करने की आवश्यकता हो सकती है ... इसके अलावा, वह स्क्रिप्ट टैग है जहां आपने index_array को बंद किया जा रहा है। यह स्क्रीनशॉट से प्रकट नहीं होता है।
माइक ब्रंट

अन्य में भी सतर्क है, जो केवल खाली होने पर फायर करता है, लेकिन var image_array हर बार काम करता है ... मुझे समझ नहीं आता कि क्यों?
user1564141

@ user1564141 यदि आप स्रोत के रूप में आउटपुट दिखाने के लिए अपने प्रश्न को अपडेट कर सकते हैं तो यह मदद करेगा। मुझे अभी भी इस बात का अहसास नहीं है कि आपके अनुक्रमित स्थान के सापेक्ष आपके if-else तर्क स्रोत के भीतर रहता है या नहीं।
माइक ब्रंट

6

जावास्क्रिप्ट

( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )

लॉडश एंड अंडरस्कोर

( _.isArray(myArray) && myArray.length > 0 )

6

आप jQuery का उपयोग isEmptyObject()यह जांचने के लिए कर सकते हैं कि सरणी में तत्व हैं या नहीं।

var testArray=[1,2,3,4,5]; 
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true 

स्रोत: https://api.jquery.com/jQuery.isEmptyObject/


यह केवल एक चीज है जो मेरे लिए काम करती है जब array.push () के साथ एलिमेंट्स को जोड़ा जाता है - डायनामिक रूप से जोड़े गए एलिमेंट्स (ajax) से। धन्यवाद
TomoMiha

3

एक सरल तरीका जो अपवादों में परिणत नहीं होता है यदि मौजूद नहीं है और बूलियन में परिवर्तित होता है:

!!array

उदाहरण:

if (!!arr) {
  // array exists
}

3

इस बारे में कैसा है ? अपरिभाषित सरणी की लंबाई की जाँच अपवाद को फेंक सकती है।

if(image_array){
//array exists
    if(image_array.length){
    //array has length greater than zero
    }
}

घोंसले का ifउपयोग करने से बचा जा सकता है &&, जैसा कि मौजूद नहीं है image_array && image_array.length, यह शॉर्ट सर्किट होगा image_array
rvazquezglez

3

मेरे लिए यह सुनिश्चित है कि जब मैंने उन्हें jsfiddle में डाला तो कुछ उच्च श्रेणी के उत्तर "काम" के लिए, लेकिन जब मेरे पास गतिशील रूप से उत्पन्न राशि की सूची होती है, तो जवाब में इस कोड की एक बहुत कुछ मेरे लिए काम नहीं करता है।

यह वही है जो मेरे लिए काम कर रहा है।

var from = [];

if(typeof from[0] !== undefined) {
  //...
}

ध्यान दें, अपरिभाषित के आसपास कोई उद्धरण नहीं है और मैं लंबाई से परेशान नहीं हूं।


1
दो टिप्पणियाँ: 1) typeofएक स्ट्रिंग लौटाता है, जिसकी तुलना undefinedहमेशा फ़्लासी 2 होगी) यदि fromआप परिभाषित नहीं करते हैं तो आप चेक न करें । यदि यह नहीं है तो ऊपर वाला आपका कोड एक त्रुटि देगा
Xeltor

@Xeltor नहीं यह नहीं होगा। कृपया इसे साबित करने या अपनी टिप्पणी को हटाने के लिए अपनी jsfiddle या plunker प्रदान करें।
टॉम स्टिकेल

@Xeltor, सिर्फ देख रहा है और ऐसा लगता है कि आपके उत्तर में -2 है और उन लोगों के साथ टिप्पणियों से भरा है जो बोल्ड में कह रहे हैं कि आप गलत हैं।
टॉम स्टिकेल

3

वैकल्पिक श्रृंखलन

जैसा कि वैकल्पिक चैनिंग प्रस्ताव चरण 4 में पहुंचा और इसे व्यापक समर्थन मिल रहा है, ऐसा करने का एक बहुत ही सुंदर तरीका है

if(image_array?.length){

  // image_array is defined and has at least one element

}

2

मैं जावास्क्रिप्ट में इस मुद्दे पर बहुत आता हूं। मेरे लिए सबसे अच्छा तरीका यह है कि लंबाई की जाँच करने से पहले एक बहुत व्यापक जाँच की जाए। मैंने इस प्रश्नोत्तर में कुछ अन्य समाधान देखे, लेकिन मैं nullया तो undefinedया किसी अन्य गलत मूल्य के लिए जाँच करने में सक्षम होना चाहता था ।

if(!array || array.length == 0){
    console.log("Array is either empty or does not exist")
}

यह पहली के लिए जाँच करेगा undefined, nullअन्य झूठे मूल्यों, या। यदि उनमें से कोई भी सत्य है, तो यह बूलियन को पूरा करेगा क्योंकि यह एक है OR। तब अधिक जोखिम भरा चेक array.length, जो हमें त्रुटि दे सकता है यदि सरणी अपरिभाषित है, तो जांच की जा सकती है। यह अगर पहुँचा जा कभी नहीं होगा arrayहै undefinedया nullहै, तो स्थिति का आदेश देने के लिए बहुत महत्वपूर्ण है।



1

निम्नलिखित मेरे समाधान को एक फ़ंक्शन में लपेटा गया है जो ऑब्जेक्ट स्कोप के साथ समस्याओं के एक जोड़े को प्रबंधित करने के लिए त्रुटियों को भी फेंकता है और फ़ंक्शन को दिए गए सभी प्रकार के संभावित डेटा प्रकार।

यहाँ इस समस्या ( स्रोत ) की जांच करने के लिए मेरे फिडेल का उपयोग किया गया है

var jill = [0];
var jack;
//"Uncaught ReferenceError: jack is not defined"

//if (typeof jack === 'undefined' || jack === null) {
//if (jack) {
//if (jack in window) {
//if (window.hasOwnP=roperty('jack')){
//if (jack in window){

function isemptyArray (arraynamed){
    //cam also check argument length
  if (arguments.length === 0) { 
    throw "No argument supplied";
  }

  //console.log(arguments.length, "number of arguments found");
  if (typeof arraynamed !== "undefined" && arraynamed !== null) {
      //console.log("found arraynamed has a value");
      if ((arraynamed instanceof Array) === true){
        //console.log("I'm an array");
        if (arraynamed.length === 0) {
            //console.log ("I'm empty");
            return true;
        } else {
          return false;
        }//end length check
      } else {
        //bad type
        throw "Argument is not an array";
      } //end type check
  } else {
    //bad argument
    throw "Argument is invalid, check initialization";;
  }//end argument check
}

try {
  console.log(isemptyArray(jill));
} catch (e) {
    console.log ("error caught:",e);
}

0

यदि आपके पास एक चर घोषित नहीं है, तो आप एक चेक बना सकते हैं:

if(x && x.constructor==Array && x.length){
   console.log("is array and filed");
}else{
    var x= [];
    console.log('x = empty array');
}

यह जाँचता है कि यदि चर x मौजूद है और यदि यह है, तो जाँचता है कि क्या यह एक भरा हुआ सरणी है। अन्यथा यह एक खाली सरणी बनाता है (या आप अन्य सामान कर सकते हैं);

यदि आप निश्चित हैं कि एक सरणी चर बनाया गया है तो एक साधारण जाँच है:

var x = [];

if(!x.length){
    console.log('empty');
} else {
    console.log('full');
}

आप सरणी को जांचने के सबसे संभावित तरीकों को दिखाने के साथ यहां मेरी फिडल की जांच कर सकते हैं ।



-1

ts में

 isArray(obj: any) 
{
    return Array.isArray(obj)
  }

html में

(तस्वीरें == अपरिभाषित || || (हैर्रे (तस्वीरें) और& फोटो.लगावान> 0))


3
क्या अापको उस बारे में पूर्ण विशवास है? दूसरा भाग HTML के बाद बिल्कुल नहीं दिखता है
निको हेस

-3

जब आप अपना image_array बनाते हैं, तो वह खाली होता है, इसलिए आपकी image_array.length 0 है

जैसा कि नीचे टिप्पणी में कहा गया है, मैं इस सवाल के जवाब के आधार पर अपना जवाब संपादित करता हूं ):

var image_array = []

और कोष्ठक के अंदर कोड में पहले से परिभाषित image_array के लिए कुछ भी नहीं बदलता है


मेरे पास यह स्रोत में है, जब पृष्ठ लोड हो रहा है ... बस पोस्ट करना भूल जाते हैं।
user1564141

मैं अपने उत्तर में कुछ जोड़ना चाहता हूं जो गलत हो सकता है इसलिए मैं इसे यहां बताता हूं। आम भाषाओं में, एक ब्लॉक के अंदर जो बनाया जाता है वह ब्लॉक के "बाहर" दिखाई नहीं देता है। जैसा कि आप []var image_array = []अन्य ब्लॉक के अंदर परिभाषित करते हैं, मुझे यकीन नहीं है कि इसे बाहर देखा जा सकता है। कोशिश करेंimage_array = []
Al_th

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