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

问题描述 投票:0回答:8

这个问题在这里被问到: 从数组中删除空字符串,同时保留非空字符串的索引记录

如果您注意到@Baz 所给出的内容;

"I", "am", "", "still", "here", "", "man"

“由此我希望生成以下两个数组:”

"I", "am", "still", "here", "man"

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

我的问题:是否有可能在没有任何循环的情况下使用 index

empty
删除
所有
string
...除了迭代数组之外,还有其他选择吗?

可能有一些

regex

或一些我们不知道的
jQuery

非常感谢所有答案或建议。

javascript arrays indexing string removeall
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

文档


// arr = ["I", "am", "", "still", "here", "", "man"] arr = arr.filter(v=>v!=''); // arr = ["I", "am", "still", "here", "man"]

箭头函数文档


19
投票
var newArray = oldArray.filter(function(v){return v!==''});
    

9
投票

请注意: 文档说:

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


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


1
投票
您可以使用lodash的方法,它适用于字符串、数字和布尔类型

_.compact([0, 1, false, 2, '', 3]); // => [1, 2, 3]

https://lodash.com/docs/4.17.15#compact


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

0
投票
您可以在非常简单的地方使用:


roomProvider.roomsList?.where((room) => room.roomDestination != '');
    
© www.soinside.com 2019 - 2024. All rights reserved.