如何在JavaScript中删除数组中的空元素?
是否有一种简单的方法,或者我需要循环并手动删除它们?
如何在JavaScript中删除数组中的空元素?
是否有一种简单的方法,或者我需要循环并手动删除它们?
当前回答
要移除孔,应使用
arr.filter(() => true)
arr.flat(0) // New in ES2019
对于删除孔、空和未定义:
arr.filter(x => x != null)
用于删除hole和falsy(null,undefined,0,-0,0n,NaN,“”,false,document.all)值:
arr.filter(x => x)
arr=[,null,(void 0),0,-0,0n,NaN,false,“”,42];console.log(arr.filter(()=>true));//[null,(void 0),0,-0,0n,NaN,false,“”,42]console.log(arr.filter(x=>x!=null));//[0,-0,0n,NaN,假,“”,42]console.log(arr.filter(x=>x));//[42]
注:
孔是一些没有元素的数组索引。
arr = [, ,];
console.log(arr[0], 0 in arr, arr.length); // undefined, false, 2; arr[0] is a hole
arr[42] = 42;
console.log(arr[10], 10 in arr, arr.length); // undefined, false, 43; arr[10] is a hole
arr1 = [1, 2, 3];
arr1[0] = (void 0);
console.log(arr1[0], 0 in arr1); // undefined, true; a[0] is undefined, not a hole
arr2 = [1, 2, 3];
delete arr2[0]; // NEVER do this please
console.log(arr2[0], 0 in arr2, arr2.length); // undefined, false; a[0] is a hole
上述所有方法都返回给定数组的副本,而不是就地修改它。
arr = [1, 3, null, 4];
filtered = arr.filter(x => x != null);
console.log(filtered); // [1, 3, 4]
console.log(arr); // [1, 3, null, 4]; not modified
其他回答
如果您有Javascript 1.6或更高版本,您可以使用Array.filter,使用简单的return true回调函数,例如:
arr = arr.filter(function() { return true; });
因为.filter会自动跳过原始数组中缺少的元素。
上面链接的MDN页面还包含一个很好的错误检查版本的过滤器,可以在不支持官方版本的JavaScript解释器中使用。
注意,这不会删除空条目,也不会删除具有显式未定义值的条目,但OP特别请求“缺少”条目。
使用筛选器删除数组中的空字符串。
var s=['1201,karthikeyan,K201,直升机,karthikeyan.a@limitlessmobil.com,8248606269,7/14/201745680,TN-KAR24,88001000200300,Karthikeyan,2017年11月24日,Karthikey an,2017月11日,可用\r,'' ]var newArr=s.filter(函数(条目){return entry.trim()!=“”;})console.log(newArr);
这可能会帮助您:https://lodash.com/docs/4.17.4#remove
var details = [
{
reference: 'ref-1',
description: 'desc-1',
price: 1
}, {
reference: '',
description: '',
price: ''
}, {
reference: 'ref-2',
description: 'desc-2',
price: 200
}, {
reference: 'ref-3',
description: 'desc-3',
price: 3
}, {
reference: '',
description: '',
price: ''
}
];
scope.removeEmptyDetails(details);
expect(details.length).toEqual(3);
scope.removeEmptyDetails = function(details){
_.remove(details, function(detail){
return (_.isEmpty(detail.reference) && _.isEmpty(detail.description) && _.isEmpty(detail.price));
});
};
删除所有空元素
如果数组包含空对象、数组和字符串以及其他空元素,我们可以使用以下方法删除它们:
const arr=[[],['not','empty'],{},{key:'value'},0,1,null,2,“”,“here”,“”3,undefined,3,,,4,4,5,6,,]let filtered=JSON.stringify(arr.filter((obj)=>{回来[null,未定义,“”]。includes(obj)}).filter((el)=>{返回类型el!=“object”||对象.键(el).长度>0}))console.log(JSON.parse(已过滤))
简单压缩(从数组中删除空元素)
使用ES6:
常量arr=[0,1,null,2,“”,3,未定义,3,,,4,4,5,6,,]let filtered=arr.filter((obj)=>{return!〔null,undefined〕.includes(obj)})console.log(已过滤)
使用纯Javascript->
var arr=[0,1,null,2,“”,3,未定义,3,,,4,4,5,6,,]var filtered=arr.filter(函数(obj){return!〔null,undefined〕.includes(obj)})console.log(已过滤)
这个呢(ES6):从数组中删除Falsy值。
var arr = [0,1,2,"test","false",false,true,null,3,4,undefined,5,"end"];
arr.filter((v) => (!!(v)==true));
//output:
//[1, 2, "test", "false", true, 3, 4, 5, "end"]