可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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 index
es 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.
回答1:
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
回答2:
var newArray = oldArray.filter(function(v){return v!==''});
回答3:
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;
};
}
回答4:
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];
回答5:
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);