Remove empty strings from array while keeping record Without Loop?

JavascriptArraysIndexingStringRemoveall

Javascript Problem Overview


This question was asked here: https://stackoverflow.com/questions/18113243/remove-empty-strings-from-array-while-keeping-record-of-indexes-with-non-empty-s

If you'd notice the given as @Baz layed it out;

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

"and from this I wish to produce the following two arrays:"

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

All the Answers to this question referred to a form of looping.

My question: Is there a possibility to remove all indexes with empty string without any looping? ... is there any other alternative apart from iterating the array?

May be some regex or some jQuery that we are not aware of?

All answers or suggestions are highly appreciated.

Javascript Solutions


Solution 1 - Javascript

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

filter documentation


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

Arrow functions documentation

Solution 2 - Javascript

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

Solution 3 - Javascript

PLEASE NOTE: The documentation says:

> filter is a JavaScript extension to the ECMA-262 standard; as such > it may not be present in other implementations of the standard. You > can work around this by inserting the following code at the beginning > of your scripts, allowing use of filter in ECMA-262 implementations > which do not natively support it. This algorithm is exactly the one > specified in ECMA-262, 5th edition, assuming that fn.call evaluates to > the original value of Function.prototype.call, and that > Array.prototype.push has its original value.

So, to avoid some heartache, you may have to add this code to your script At the beginning.

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;
  };
}

Solution 4 - Javascript

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

as returned v is implicity converted to truthy

Solution 5 - Javascript

If are using jQuery, grep may be useful:


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

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

arr is now [ a, b, c, d, e, f, g];

Solution 6 - Javascript

You can use lodash's method, it works for string, number and boolean type

_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]

https://lodash.com/docs/4.17.15#compact

Solution 7 - Javascript

i.e we need to take multiple email addresses separated by comma, spaces or newline as below.

    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);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionUniversal GraspView Question on Stackoverflow
Solution 1 - JavascriptIsaacView Answer on Stackoverflow
Solution 2 - JavascripthaithamahmedView Answer on Stackoverflow
Solution 3 - JavascriptErickBestView Answer on Stackoverflow
Solution 4 - JavascripthaindView Answer on Stackoverflow
Solution 5 - Javascriptsansid1983View Answer on Stackoverflow
Solution 6 - JavascriptEsin ÖNERView Answer on Stackoverflow
Solution 7 - JavascriptAtif HussainView Answer on Stackoverflow