बिना लूप के रिकॉर्ड रखते हुए सरणी से खाली स्ट्रिंग्स निकालें?


90

यह सवाल यहां पूछा गया था: गैर खाली तारों के साथ अनुक्रमितों का रिकॉर्ड रखते समय सरणी से खाली स्ट्रिंग्स निकालें

यदि आप दिए गए नोटिस को @Baz के रूप में देखते हैं;

"I", "am", "", "still", "here", "", "man"

"और इससे मैं निम्नलिखित दो सरणियों का निर्माण करना चाहता हूं:"

"I", "am", "still", "here", "man"

इस प्रश्न के सभी उत्तरों को लूपिंग के रूप में संदर्भित किया जाता है।

मेरा प्रश्न: क्या किसी भी लूपिंग के साथ सभी को हटाने की संभावना है ? ... क्या सरणी को पुनरावृत्त करने के अलावा कोई अन्य विकल्प है?indexempty string

कुछ- regexन-कुछ jQueryऐसा हो सकता है जिसके बारे में हमें जानकारी नहीं है?

सभी जवाब या सुझावों की बहुत सराहना की जाती है।

जवाबों:


323
var arr = ["I", "am", "", "still", "here", "", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(Boolean)
// arr = ["I", "am", "still", "here", "man"]

filter प्रलेखन


// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(v=>v!='');
// arr = ["I", "am", "still", "here", "man"]

तीर कार्य प्रलेखन


3
मुझे पता है कि आप कैसा महसूस करते हैं, मैंने इसे महीनों पहले इस्तेमाल किया था, इतने छोटे मुद्दों को ठीक करता है
इसहाक

14
@DiegoPlentz लोग, जो अभी भी IE8 चला रहे हैं, एक सरणी में सिर्फ रिक्तियां निकालने की तुलना में बहुत अधिक समस्याएं हैं ... मैं मुश्किल से इन दिनों उस ब्राउज़र का समर्थन करने पर विचार कर रहा हूं
इसहाक

यह इस समय के सबसे करीब है array.filter(!!)कि हम वर्तमान में :)
james_womack

2
इस जवाब के लिए सभी क्रेडिट stackoverflow.com/questions/16701319/… पर
आइजैक

के बारे में कुछ स्पष्टीकरण Booleanअच्छा होगा।
रॉब्सच

18
var newArray = oldArray.filter(function(v){return v!==''});

आसानी से सबसे अच्छा जवाब। ठीक वही करता है जो सवाल पूछता है। शून्य मान नहीं निकालता है।
ब्रायन

9

कृपया ध्यान दें: प्रलेखन कहता है:

filterECMA-262 मानक के लिए एक जावास्क्रिप्ट एक्सटेंशन है; जैसा कि यह मानक के अन्य कार्यान्वयन में मौजूद नहीं हो सकता है । आप अपनी स्क्रिप्ट की शुरुआत में निम्नलिखित कोड डालकर इसके चारों ओर काम कर सकते हैं, ECMA-262 कार्यान्वयन में फ़िल्टर का उपयोग करने की अनुमति देता है जो मूल रूप से इसका समर्थन नहीं करते हैं। यह एल्गोरिथ्म ECMA-262, 5 वें संस्करण में बिल्कुल निर्दिष्ट है, यह मानते हुए कि fn.call, फंक्शन.प्रोक्टोटाइप.call के मूल मान का मूल्यांकन करता है, और Array.prototype.push का मूल मान है।

इसलिए, कुछ दिल के दर्द से बचने के लिए, आपको शुरुआत में इस कोड को अपनी स्क्रिप्ट में जोड़ना पड़ सकता है ।

if (!Array.prototype.filter) {
  Array.prototype.filter = function (fn, context) {
    var i,
        value,
        result = [],
        length;
        if (!this || typeof fn !== 'function' || (fn instanceof RegExp)) {
          throw new TypeError();
        }
        length = this.length;
        for (i = 0; i < length; i++) {
          if (this.hasOwnProperty(i)) {
            value = this[i];
            if (fn.call(context, value, i, this)) {
              result.push(value);
            }
          }
        }
    return result;
  };
}

3
arr = arr.filter(v => v);

जैसा कि लौटाया गया vहै कि सत्यता को सत्यता में बदल दिया जाता है


2

यदि आप jQuery का उपयोग कर रहे हैं, तो grep उपयोगी हो सकता है:


var arr = [ a, b, c, , e, f, , g, h ];

arr = jQuery.grep(arr, function(n){ return (n); });

arr अब है [ a, b, c, d, e, f, g];


2
jquery एक मासिक धर्म कार्य के लिए बहुत अधिक मात्रा में लगता है
इसहाक

0

यानी हमें कई ईमेल पते अल्पविराम, रिक्त स्थान या न्यूलाइन द्वारा अलग से लेने होंगे।

    var emails = EmailText.replace(","," ").replace("\n"," ").replace(" ","").split(" ");
    for(var i in emails)
        emails[i] = emails[i].replace(/(\r\n|\n|\r)/gm,"");

    emails.filter(Boolean);
    console.log(emails);

.replace(" ","").split(" ")"सभी रिक्त स्थान को कुछ नहीं के साथ बदलें, फिर हर स्थान पर विभाजन की कोशिश करें"
इसहाक

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