从Array中删除未定义的值

时间:2015-02-19 13:18:33

标签: javascript arrays filter

在某些情况下,我们可能会在Array结构中出现undefined或一般 falsy 值。例如,从数据库或HTML结构等未知来源读取和填充数据时。像

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

由于在循环使用此类数组并处理元素时可能会出现问题,因此删除undefined(错误值)的最佳做法是什么?

13 个答案:

答案 0 :(得分:58)

在这里使用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 );

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

data = data.filter( Boolean );

由于Boolean()构造函数在 truthy 值上返回true而在任何 falsy 值上返回false,这是非常整洁的选项。

答案 1 :(得分:39)

使用lambda内联

result.filter(item => item);

答案 2 :(得分:7)

ES6单行

useEffect

答案 3 :(得分:3)

您可以使用lodash import { Injectable } from '@angular/core'; import { TranslateLoader } from '@ngx-translate/core'; import { Observable, of } from 'rxjs'; @Injectable() export class MiTranslateLoaderService implements TranslateLoader { getTranslation(lang: string): Observable<any> { return of({ lbl_select: 'Select', }); } } 方法,该方法将删除compactnullundefined

''

答案 4 :(得分:2)

Array.prototype.reduce()可用于按条件从数组中删除元素,但如果需要在一次迭代中进行额外的元素转换。

从数组中删除undefined值,并支持子数组。

function transform(arr) {
    return arr.reduce((memo, item) => {
        if (typeof item !== "undefined") {
            if (Array.isArray(item)) item = transform(item);
            // We can transform item here.
            memo.push(item);
        }
        return memo;
    }, []);
}

let test1 = [1, 2, "b", 0, {}, "", , " ", NaN, 3, undefined, null, 5, false, true, [1, true, 2, , undefined, 3, false, ''], 10];

console.log(transform(test1));

jsfiddle.net/bjoy4bcc/

上试用

答案 5 :(得分:1)

var a =  ["3","", "6"];
var b =  [23,54,56];
var result = [];

for (var i=0;i<a.length;++i) {
    if (a[i] != "") {
        result[i] = b[i];
    }
}

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

console.log(result);

答案 6 :(得分:1)

如果您有对象数组,并且要删除所有nullundefined项:

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

答案 7 :(得分:1)

正如Diogo Capela所说,但是0也没有被过滤掉。

[].filter(item => item !== undefined && item !== null)

答案 8 :(得分:1)

在ES6中,这可以通过简单地使用带有返回值的过滤器来实现,如下所示:

$chkThis.Add_CheckStateChanged({
If ($chkThis.Checked) {
$okButton.enabled = $true
}
Else {
$okButton.enabled = $true
}})

$Form.ShowDialog()

答案 9 :(得分:1)

使用np.arange(0., 11.)的解决方案实际上将使数组保持不变,并创建一个没有不需要的项目的新数组。如果您想在不复制的情况下清理阵列,则可以使用以下方法:

Array.filter

答案 10 :(得分:1)

data.filter(Boolean)

是最简短易读的方法。

答案 11 :(得分:0)

var arr1 = [NaN,0,15,false,-22,'',undefined,47,null];

var array1 = arr1.filter(function(e){return e;});

document.write(array1);

单行ans

答案 12 :(得分:-1)

var data = Object.keys(data)

这将删除未定义的值,但数组索引将更改