从数组中删除空字符串,同时保持记录没有循环?
Posted
技术标签:
【中文标题】从数组中删除空字符串,同时保持记录没有循环?【英文标题】:Remove empty strings from array while keeping record Without Loop? 【发布时间】:2013-11-22 05:05:22 【问题描述】:这里有人问过这个问题: 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
?
高度赞赏所有答案或建议。
【问题讨论】:
【参考方案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
【讨论】:
我很清楚你的感受,几个月前我用过,解决了很多小问题 @DiegoPlentz 仍在运行 IE8 的人会遇到更多的问题,而不仅仅是删除数组中的空白......这些天我几乎从未考虑过支持该浏览器 这是我们目前能得到的最接近array.filter(!!)
:)
此答案的所有功劳应归于***.com/questions/16701319/…
对Boolean
做一些解释会很好。【参考方案2】:
var newArray = oldArray.filter(function(v)return v!=='');
【讨论】:
轻松获得最佳答案。完全按照问题的要求进行。不删除零值。【参考方案3】:请注意: 文档说:
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;
;
【讨论】:
【参考方案4】:arr = arr.filter(v => v);
返回的v
被隐式转换为truthy
【讨论】:
【参考方案5】:如果使用 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];
【讨论】:
jquery 对于一项琐碎的任务来说似乎很笨重【参考方案6】:你可以使用lodash的方法,它适用于字符串、数字和布尔类型
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]
https://lodash.com/docs/4.17.15#compact
【讨论】:
【参考方案7】:即我们需要使用逗号、空格或换行符分隔的多个电子邮件地址,如下所示。
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(" ")
"将所有空格替换为空,然后尝试在每个空格处拆分"以上是关于从数组中删除空字符串,同时保持记录没有循环?的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]
从键盘输入一串字符串,统计字符串中特定字符的个数(特定字符需要从键盘输入),并输出个数。 说明?
IOS,如何在数组中的 dic 中循环 dic 以替换空字符串的空值
C语言试题三十八之将s所指字符串中除了下标为偶数同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。