我有以下数组:
var imagesList = [undefined x 1, cars.jpg, undefined x 1, boats.jpg];
如何过滤掉undefined?所以我可以得到如下:
var imagesShow = [cars.jpg, boats.jpg];
我没有找到很多关于使用javascript删除数组中未定义的文档。
答案 0 :(得分:9)
您可以将Array#filter
与Boolean
一起用作truthy值的回调。
var imagesList = [undefined, 'cars.jpg', undefined, 'boats.jpg'],
imagesShow = imagesList.filter(Boolean);
console.log(imagesShow);

答案 1 :(得分:5)
使用Array#filter
:
var imagesList = [undefined, 'cars.jpg', undefined, 'boats.jpg'];
var result = imagesList.filter(function(v) {
return v !== undefined;
})
console.log(result);
答案 2 :(得分:3)
尝试使用Array.filter函数
var imagesShow = imagesList.filter(function (value) {
return value != undefined;
};
任何未通过上述回调函数检查的数组元素都将被过滤掉 - 在这种情况下,如果元素未定义。
答案 3 :(得分:2)
使用 Array.Filter
var imagesList = [undefined, 'cars.jpg', undefined, 'boats.jpg'];
var result = imagesList.filter(function( element ) {
return element !== undefined;
});
console.log(result);

答案 4 :(得分:1)
使用Array.filter()函数表达式尝试ES6 Arrow方法。
var imagesList = [undefined, "cars.jpg", undefined, "boats.jpg"];
var filteredList = imagesList.filter(item => { return item !== undefined });
console.log(filteredList);
答案 5 :(得分:0)
通过显示undefined x 2
,您的数组清楚地表明它是一个稀疏的数组,这意味着您没有任何未定义的项目。你根本没有把握物品的钥匙。
好的,您可以拥有并希望保留正确的void 0
或undefined
项(在这种情况下,所有上述解决方案都将失败)或数字值0
或{{1}对象项(在这种情况下,接受的答案将失败)。
为了将稀疏数组转换为密集形式,most efficient method将是null
循环(或for in
)。
因此,对于稀疏数组循环,最好使用
Object.keys()

现在让我们将上面的代码与优雅的过滤解决方案进行比较;
var res = [],
a = [];
a[1] = "cars.jpg";
a[5] = null;
a[999999] = "beauty.jpg";
// [undefined × 1, "cars.jpg", undefined × 3, null, undefined × 999993, "beauty.jpg"]
function dense(a){
var r = [];
for (i in a) r.push(a[i]);
return r;
}
console.time("test");
res = dense(a);
console.timeEnd("test");
console.log(res);

因此,当您看到var res = [],
a = [];
a[1] = "cars.jpg";
a[5] = null;
a[999999] = "beauty.jpg";
// [undefined × 1, "cars.jpg", undefined × 3, null, undefined × 999993, "beauty.jpg"]
console.time("test");
res = a.filter(Boolean);
console.timeEnd("test");
console.log(res);
消失时,它会变慢,因为它会检查所有非现有密钥。但是,使用null
循环保持假名值是否完全由您控制。