如何从JavaScript数组中删除空元素?
有没有简单直接的方法,还是必须手动循环并逐个删除?
如何从JavaScript数组中删除空元素?
有没有简单直接的方法,还是必须手动循环并逐个删除?
array.filter(String);
可以从数组中移除所有空元素。它会返回javascript数组中的所有非空元素。Boolean
会将其移除为空字符串,而同时接受null
。 - Paul Watsonnull
和0
。无论它应该如何工作...都没有用。特别是如果我们考虑任何可能具有自定义toString()
定义的内容,这可能导致进一步将项目视为falsy而实际上不是。 - VLAZ最简单的方法
[NaN、undefined、null、0、1、2、2000、Infinity] .filter(Boolean)
这个是有效的,我在AppJet中测试过(你可以将代码复制粘贴到它的IDE中,然后按下“重新加载”来查看它的运行情况,不需要创建账户)
/* appjet:version 0.1 */
function Joes_remove(someArray) {
var newArray = [];
var element;
for( element in someArray){
if(someArray[element]!=undefined ) {
newArray.push(someArray[element]);
}
}
return newArray;
}
var myArray2 = [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,];
print("Original array:", myArray2);
print("Clenased array:", Joes_remove(myArray2) );
/*
Returns: [1,2,3,3,0,4,4,5,6]
*/
for ... in
枚举键实际上会导致跳过缺失的元素。对于 undefined
的测试仅用于删除明确设置为该值的实际元素。 - Alnitak我就是这样简单地做。
const arr = ['apple', '', 'orange', '', 'banana', ''];
const filteredArr = arr.filter(function(element) {
return element !== '';
});
console.log(filteredArr); // ['apple', 'orange', 'banana']
删除空元素的最佳方法是使用Array.prototype.filter()
,正如其他答案中已经提到的那样。
不幸的是,Array.prototype.filter()
不受IE<9的支持。如果您仍然需要支持IE8或更早版本的IE,则可以使用以下polyfill在这些浏览器中添加对Array.prototype.filter()
的支持:
if (!Array.prototype.filter) {
Array.prototype.filter = function(fun/*, thisArg*/) {
'use strict';
if (this === void 0 || this === null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== 'function') {
throw new TypeError();
}
var res = [];
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for (var i = 0; i < len; i++) {
if (i in t) {
var val = t[i];
if (fun.call(thisArg, val, i, t)) {
res.push(val);
}
}
}
return res;
};
}
如果有人想要清空整个数组或对象,这可能会有所帮助。
var qwerty = {
test1: null,
test2: 'somestring',
test3: 3,
test4: {},
test5: {
foo: "bar"
},
test6: "",
test7: undefined,
test8: " ",
test9: true,
test10: [],
test11: ["77","88"],
test12: {
foo: "foo",
bar: {
foo: "q",
bar: {
foo:4,
bar:{}
}
},
bob: {}
}
}
var asdfg = [,,"", " ", "yyyy", 78, null, undefined,true, {}, {x:6}, [], [2,3,5]];
function clean_data(obj) {
for (var key in obj) {
// Delete null, undefined, "", " "
if (obj[key] === null || obj[key] === undefined || obj[key] === "" || obj[key] === " ") {
delete obj[key];
}
// Delete empty object
// Note : typeof Array is also object
if (typeof obj[key] === 'object' && Object.keys(obj[key]).length <= 0) {
delete obj[key];
}
// If non empty object call function again
if(typeof obj[key] === 'object'){
clean_data(obj[key]);
}
}
return obj;
}
var objData = clean_data(qwerty);
console.log(objData);
var arrayData = clean_data(asdfg);
console.log(arrayData);
输出:
移除任何null
、undefined
、""
、" "
、空对象
或空数组
jsfiddle 这里
npm i clean-deep
命令安装。const cleanDeep = require('clean-deep');
var array = [0, 1, null, 2, "", 3, undefined, 3,,,,,, 4,, 4,, 5,, 6,,,,];
const filterd = cleanDeep(array);
console.log(filterd);
var s = [ '1,201,karthikeyan,K201,HELPER,karthikeyan.a@limitlessmobil.com,8248606269,7/14/2017,45680,TN-KAR24,8,800,1000,200,300,Karthikeyan,11/24/2017,Karthikeyan,11/24/2017,AVAILABLE\r',
'' ]
var newArr = s.filter(function(entry) { return entry.trim() != ''; })
console.log(newArr);
const some_array = [ 0, 1, undefined, "something", "", null, {}, , ]
for (let i = 0; i < some_array.length; ) { // iterate some_array
if (some_array[i] == null) { // if empty
some_array.splice(i, 1) // splice one element out of array
// and do not advance to next element
// (splice moves the next element to current position)
} else {
++i // else advance to next element
}
}
== null
的比较,它可以捕获undefined
、null
和空元素,但不包括0
和""
。这个方法只会删除空值而不是假值,我认为这更可取。
还有一个选项可以删除 null 值。
使用这种方法应该比使用 splice 更快。
function cleanArray(a, removeNull) {
var i, l, temp = [];
l = a.length;
if (removeNull) {
for (i = 0; i < l; i++) {
if (a[i] !== undefined && a[i] !== null) {
temp.push(a[i]);
}
}
} else {
for (i = 0; i < l; i++) {
if (a[i] !== undefined) {
temp.push(a[i]);
}
}
}
a.length = 0;
l = temp.length;
for (i = 0; i < l; i++) {
a[i] = temp[i];
}
temp.length = 0;
return a;
}
var myArray = [1, 2, , 3, , 3, , , 0, , null, false, , NaN, '', 4, , 4, , 5, , 6, , , , ];
cleanArray(myArray);
myArray;
var a = [,,]
和var a = [undefined, undefined]
之间存在区别。前者是真正的空数组,而后者实际上有两个键,但值为undefined
。 - Alnitaknull
/undefined
是更好的实践。例如,如果你的null
来自于使用map
函数映射另一个数组时,对于某些元素返回null
,那么在运行map
之前尝试使用Array.filter
过滤掉这些元素。这样可以使你的代码更易读/自我记录。显然,这并不适用于每种情况,但它可以应用于很多情况。 - Luke Redmore