98

This question was asked here: Remove empty strings from array while keeping record of indexes with non empty strings

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.

asked Nov 10, 2013 at 10:34
0

8 Answers 8

340
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

answered Nov 10, 2013 at 10:41
Sign up to request clarification or add additional context in comments.

6 Comments

I know exactly how you feel, I used it months ago, fixes so many small issues
@DiegoPlentz people who're still running IE8 are gonna have a lot more problems than just removing blanks in an array... I barely ever consider supporting that browser these days
This is the closest to array.filter(!!) that we can currently get :)
All credit for this answer should go to stackoverflow.com/questions/16701319/…
Some explanation regarding Boolean would be nice.
|
19
var newArray = oldArray.filter(function(v){return v!==''});
answered Mar 11, 2014 at 21:34

1 Comment

Easily the best answer. Does exactly what the question asks. Doesn't remove zero values.
9

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;
 };
}
answered Nov 10, 2013 at 10:52

Comments

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

as returned v is implicity converted to truthy

answered Jan 11, 2019 at 3:27

Comments

2

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

Isaac
11.8k5 gold badges36 silver badges45 bronze badges
answered Oct 28, 2014 at 14:18

1 Comment

jquery seems like a lot of bulkiness for a menial task
1

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

answered Dec 23, 2019 at 12:26

Comments

0

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);
answered Sep 15, 2016 at 12:38

1 Comment

.replace(" ","").split(" ") "replace all spaces with nothing, then try split at every space"
0

You can use where it's very simple:


roomProvider.roomsList?.where((room) => room.roomDestination != '');
answered Dec 17, 2024 at 21:49

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.