这个问题在这里被问到: Remove empty strings from array while keeping record of indexes with non empty strings
如果你注意到@Baz给出的那个;
"I", "am", "", "still", "here", "", "man"
“并且我希望生成以下两个数组:”
"I", "am", "still", "here", "man"
此问题的所有答案都提到了一种循环形式。
我的问题:是否有可能删除所有index
es empty
string
而没有任何循环? ..除了迭代数组之外,还有其他选择吗?
我们可能不知道某些regex
或某些jQuery
?
我们非常感谢所有的答案或建议。
答案 0 :(得分:290)
var arr = ["I", "am", "", "still", "here", "", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(Boolean)
// arr = ["I", "am", "still", "here", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(v=>v!='');
// arr = ["I", "am", "still", "here", "man"]
答案 1 :(得分:18)
var newArray = oldArray.filter(function(v){return v!==''});
答案 2 :(得分:8)
请注意: 文档说:
filter
是ECMA-262标准的JavaScript扩展;因此 它可能不会出现在标准的其他实现中。您 可以通过在开头插入以下代码来解决此问题 您的脚本,允许在ECMA-262实现中使用过滤器 它本身不支持它。这个算法恰好是一个 在ECMA-262第5版中规定,假设fn.call评估为 Function.prototype.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 :(得分:3)
arr = arr.filter(v => v);
返回的v
被隐式转换为真
答案 4 :(得分: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];
答案 5 :(得分: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);
答案 6 :(得分:0)
您可以使用lodash的方法,它适用于字符串,数字和布尔类型
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]