从数组中删除未定义的值

IT技术 javascript arrays filter
2021-02-23 13:57:30

在某些情况下,可能会发生数组结构中undefined或通常为值的情况。例如,从一些未知来​​源(如数据库或 HTML 结构)读取和填充数据时。喜欢

var data = [42, 21, undefined, 50, 40, undefined, 9]

由于在循环遍历此类数组并处理元素时可能会导致麻烦,因此删除undefined(falsy values)的最佳做法是什么

6个回答

Array.prototype.filter这里使用可能很明显。所以为了只删除未定义的值,我们可以调用

var data = [42, 21, undefined, 50, 40, undefined, 9];

data = data.filter(function( element ) {
   return element !== undefined;
});

如果我们想过滤掉所有的假值(例如 0 或 null),我们可以return !!element;改用。

但是,我们可以做到这一点略低更优雅,被正好路过的Boolean构造函数,分别是Number构造函数.filter

data = data.filter( Number );

在这种情况下,这将完成工作,通常删除任何虚假值,我们会调用

data = data.filter( Boolean );

由于Boolean()构造函数返回truetruthy值和false任何falsyvalue,这是一个非常整洁的选择。

这也将删除false可能存在于数组中的 falsey 值,例如
2021-04-23 13:57:30
如果你只是低声说“......该死......”,那么你就是像我一样的书呆子了!😂
2021-04-29 13:57:30
这可以缩短为 .filter(n=>n!==undefined)
2021-05-03 13:57:30
@jAndy 谢谢。它也解决了我在 IE 11 中的问题。之前我使用箭头函数来删除未定义的。
2021-05-13 13:57:30
请注意,filter(Number)这也将删除0.
2021-05-16 13:57:30

使用 lambda 内联

result.filter(item => item);
最佳答案在这里
2021-05-10 13:57:30
这将删除所有虚假值。由于 OP 指定的 falsey 值是不需要的,因此这绝对是 IMO 的最佳答案。但是,你还特别指出 undefined 在哪一点你想要result.filter(item => item !== undefined)
2021-05-12 13:57:30
[true,false,undefined,null,'a',1,0,'0'].filter(x=>x) 回报 [true, "a", 1, "0"]
2021-05-13 13:57:30

您可以使用 lodashcompact方法,该方法删除null,undefined''

_.compact(data)
如果没有其他图书馆,就不能免费获得。这太过分了
2021-04-21 13:57:30
这有效并清理阵列。这是我更喜欢的解决方案
2021-04-27 13:57:30

ES6 单行

data.filter(e => e)
小心,这也会删除任何“虚假”值,例如零。 [undefined, null, 0, false].filter(e => e) // []
2021-05-02 13:57:30
JavaScript 有时很奇怪 :D
2021-05-02 13:57:30

如果您有一组对象并想删除所有nullundefined项目:

[].filter(item => !!item);