在某些情况下,我们可能会在Array结构中出现undefined
或一般 falsy 值。例如,从数据库或HTML结构等未知来源读取和填充数据时。像
var data = [42, 21, undefined, 50, 40, undefined, 9]
由于在循环使用此类数组并处理元素时可能会出现问题,因此删除undefined
(错误值)的最佳做法是什么?
答案 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',
});
}
}
方法,该方法将删除compact
,null
和undefined
''
答案 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));
上试用
答案 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)
如果您有对象数组,并且要删除所有null
和undefined
项:
[].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)
这将删除未定义的值,但数组索引将更改