从数组中删除空字符串,同时保持记录没有循环?

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"

这个问题的所有答案都提到了一种循环形式。

我的问题:是否有可能删除所有 indexes 和 empty string 没有任何循环? ...还有其他选择吗除了迭代数组?

可能是我们不知道的regexjQuery

高度赞赏所有答案或建议。

【问题讨论】:

【参考方案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 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]

从数组中删除空字符串或空白字符串 - Javascript

使用扩展语法从包含表情符号的字符串中过滤空字符串

从键盘输入一串字符串,统计字符串中特定字符的个数(特定字符需要从键盘输入),并输出个数。 说明?

IOS,如何在数组中的 dic 中循环 dic 以替换空字符串的空值

C语言试题三十八之将s所指字符串中除了下标为偶数同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。