如何删除undefined并创建一个新的数组Javascript?

时间:2017-06-25 18:55:19

标签: javascript arrays

我有以下数组:

var imagesList = [undefined x 1, cars.jpg, undefined x 1, boats.jpg];

如何过滤掉undefined?所以我可以得到如下:

var imagesShow = [cars.jpg, boats.jpg];

我没有找到很多关于使用javascript删除数组中未定义的文档。

6 个答案:

答案 0 :(得分:9)

您可以将Array#filterBoolean一起用作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 0undefined项(在这种情况下,所有上述解决方案都将失败)或数字值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循环保持假名值是否完全由您控制。