我有以下数组:
var imagesList = [undefined x 1, cars.jpg, undefined x 1, boats.jpg];
如何过滤掉未定义的内容?这样我就可以得到以下结果:
var imagesShow = [cars.jpg, boats.jpg];
我没有找到有关使用JavaScript消除数组中未定义元素的详细文档。
我有以下数组:
var imagesList = [undefined x 1, cars.jpg, undefined x 1, boats.jpg];
var imagesShow = [cars.jpg, boats.jpg];
我没有找到有关使用JavaScript消除数组中未定义元素的详细文档。
Array#filter
,并将 Boolean
作为回调函数,以获取真值。
var imagesList = [undefined, 'cars.jpg', undefined, 'boats.jpg'],
imagesShow = imagesList.filter(Boolean);
console.log(imagesShow);
使用Array#filter
:
var imagesList = [undefined, 'cars.jpg', undefined, 'boats.jpg'];
var result = imagesList.filter(function(v) {
return v !== undefined;
})
console.log(result);
尝试使用Array.filter函数
var imagesShow = imagesList.filter(function (value) {
return value != undefined;
};
回调函数中未通过检查的任何数组元素都将被过滤掉 - 在这种情况下,如果元素未定义。
使用Array.filter()
方法
var imagesList = [undefined, 'cars.jpg', undefined, 'boats.jpg'];
var result = imagesList.filter(function( element ) {
return element !== undefined;
});
console.log(result);
var imagesList = [undefined, "cars.jpg", undefined, "boats.jpg"];
var filteredList = imagesList.filter(item => { return item !== undefined });
console.log(filteredList);
undefined x 2
,您的数组清楚地表明它是一个稀疏数组,这意味着您没有任何未定义的项。您只是没有键来存储项目。void 0
或undefined
项(在这种情况下,所有上述解决方案都将失败),或者数字值0
或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
已经消失了,并且它变得更慢了,因为它检查了所有不存在的键。然而,使用for in
循环,保留falsey值与否完全取决于你自己的控制。
undefined x 1
? - Nina Scholz