जाँच लें कि सरणी खाली है या रिक्त है


106

मैं जानना चाहूंगा कि कैसे चेक करना है कि कोई सरणी jQuery में खाली है या रिक्त है। मैंने कोशिश की array.length === 0लेकिन यह काम नहीं किया। इसने कोई त्रुटि भी नहीं की।

यह कोड है:

var album_text = new Array();

$("input[name='album_text[]']").each(function(){
  if( $(this).val() &&  $(this).val() != '') {
    album_text.push($(this).val());
  }
});
if (album_text.length === 0) {
  $('#error_message').html("Error");
}

else {
  // send data
}

2
उसी तरह जैसे "सामान्य जावास्क्रिप्ट": stackoverflow.com/questions/2672380/…
जूलियन श्मिट

1
@ जूलियन, मैंने इस धागे को शुरू करने से पहले उस धागे में सूचीबद्ध सभी समाधानों की कोशिश की। उनमें से किसी ने भी काम नहीं किया।
इनपुट

क्या हम संदर्भ के लिए कुछ और कोड प्राप्त कर सकते हैं? चारों ओर जावास्क्रिप्ट, HTML? क्या आप सुनिश्चित हैं कि $("input[name='album_text[]']")वास्तव में लौटने वाले तत्व हैं?
जॉन एडम्स

@JulienSchmidt: आपके द्वारा जुड़ा प्रश्न यह जाँचने के बारे में है कि क्या कोई सरणी मान रिक्त है, संपूर्ण सरणी नहीं।
डैन डस्केल्सस्कु

जवाबों:


168

जब तक आपका चयनकर्ता वास्तव में काम कर रहा है, मुझे आपके कोड में कुछ भी गलत नहीं दिखता है जो कि सरणी की लंबाई की जांच करता है। वही करना चाहिए जो आप चाहते हैं। सरल और अधिक पठनीय होने के लिए अपने कोड को साफ़ करने के कई तरीके हैं। यहाँ मैं साफ किया के बारे में नोट्स के साथ एक साफ संस्करण है।

var album_text = [];

$("input[name='album_text[]']").each(function() {
    var value = $(this).val();
    if (value) {
        album_text.push(value);
    }
});
if (album_text.length === 0) {
    $('#error_message').html("Error");
}

else {
  //send data
}

आप क्या कर रहे थे और मैंने क्या बदला, इस पर कुछ नोट्स।

  1. $(this)हमेशा एक वैध jQuery वस्तु है, इसलिए कभी भी जांच करने का कोई कारण नहीं है if ($(this))। इसके अंदर कोई DOM ऑब्जेक्ट नहीं हो सकता है, लेकिन $(this).lengthअगर आप की जरूरत है, तो आप इसे देख सकते हैं , लेकिन यहाँ यह आवश्यक नहीं है क्योंकि .each()लूप नहीं चलेगा अगर $(this)आपके आइटम नहीं थे तो आपके .each()लूप के अंदर हमेशा कुछ होगा।
  2. एक ही फ़ंक्शन में कई बार $ (यह) का उपयोग करना अक्षम है। एक स्थानीय चर में इसे पाने के लिए बहुत बेहतर है और फिर उस स्थानीय चर से इसका उपयोग करें।
  3. यह []बजाय के साथ सरणियों को शुरू करने की सिफारिश की है new Array()
  4. if (value)जब मूल्य की उम्मीद की जाती है तो एक स्ट्रिंग से दोनों की रक्षा होगी value == null, value == undefinedऔर value == ""इसलिए आपको ऐसा करने की आवश्यकता नहीं है if (value && (value != ""))। आप बस कर सकते हैं: if (value)सभी तीन खाली स्थितियों की जांच करने के लिए।
  5. if (album_text.length === 0) आपको बताएगा कि क्या सरणी खाली है जब तक कि यह एक वैध, आरंभीकृत सरणी (जो यहां है)।

आप इस चयनकर्ता के साथ क्या करने की कोशिश कर रहे हैं $("input[name='album_text[]']")?


5
@MaciekSemik - stackoverflow.com/questions/359494/… देखें । मैं हमेशा सख्त समानता ( ===) का उपयोग करता हूं जब तक कि मैं विशेष रूप से एक प्रकार के रूपांतरण की अनुमति नहीं देना चाहता। यह एक अच्छी आदत है।
१२

73

उपयोगकर्ता JQuery यह जाँचने के लिए खाली है कि सरणी में तत्व हैं या नहीं।

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

2
लंबाई की जाँच करने की तुलना में बहुत अधिक विश्वसनीय है, खासकर अगर आपका चर भी एक वस्तु हो सकता है (वस्तुओं के साथ, लंबाई खाली होने पर जांचने के लिए काम नहीं करती है)।
बड़ा नागा 20'14

मेरी राय में यह अधिक उपयुक्त उत्तर है।
इयरल 3

4
isEmptyObjectहमेशा falseअगर Array.prototypeबढ़ाया जाता है, तो रिटर्न Array.prototype.someFunction = function () {};- जैसे कि खाली है। ध्यान दें कि कुछ रूपरेखाएँ (जैसे Ember.js) डिफ़ॉल्ट रूप से ऐरे प्रोटोटाइप का विस्तार करती हैं।
जेन्सेंको

4
isEmptyObjectJQuery के 1.8.3 jQuery.isEmptyObject([])रिटर्न के लिए सावधान रहें false, लेकिन jQuery 1.11.3 के लिए यह रिटर्न देता है true। दरअसल, jQuery के दस्तावेज़ कहते हैं कि तर्क हमेशा एक सामान्य जावास्क्रिप्ट ऑब्जेक्ट होना चाहिए क्योंकि अन्य प्रकार के ऑब्जेक्ट (DOM एलिमेंट्स, आदिम स्ट्रिंग्स / नंबर, होस्ट ऑब्जेक्ट) ब्राउज़रों के अनुरूप परिणाम नहीं दे सकते हैं। क्षमा करें, @rhinoxi का उत्तर नहीं देखा।
दिमित्री वर्शिन

8

आपको ''अपने एरे में पुश करने से पहले (खाली स्ट्रिंग) की जांच करनी चाहिए । आपके सरणी में ऐसे तत्व हैं जो खाली तार हैं। तब आपका album_text.length === 0काम ठीक रहेगा।


कृपया अपडेट किया गया कोड देखें। मैंने यह कोड जोड़ा हैif( $(this).val() && $(this).val() != '') फिर भी यह काम नहीं करता है।
इनपुट '

8

मुझे लगता है कि यह जाँचने के लिए $ .isEmptyObject का उपयोग करने के लिए खतरनाक है कि क्या सरणी खाली है, जैसा कि @jesenko ने उल्लेख किया है। मैं बस उस समस्या से मिला।

में isEmptyObject डॉक , यह उल्लेख है:

तर्क हमेशा एक सादा जावास्क्रिप्ट ऑब्जेक्ट होना चाहिए

जिसे आप निर्धारित कर सकते हैं $.isPlainObject। की वापसी $.isPlainObject([])झूठी है।

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