在javascript中使用另一个数组创建数组

时间:2014-02-20 08:43:45

标签: javascript arrays

我有一个数组,其中我在不同的索引中添加了3个数据,如下所示

  var a=[];
   a[1]=4;
   a[3]=7;
   a[4]=8;

现在我的数组看起来像这样

 a=[undefined, 4, undefined, 7, 8, undefined]

我想从数组中单独获取值,需要添加另一个数组。有没有最简单的方法,我可以利用它。直到现在我使用“for”循环获取值,当我有少量数据时,它是可以的。这里我只需要3个值,但循环执行6次。

提前致谢

5 个答案:

答案 0 :(得分:4)

大多数数组方法无论如何都会跳过“漏洞”。

如果您没有明确要过滤它们,只需在它们上调用数组方法:

var arr = a.filter(function(){return true});

或简写:

[,4,,7,8].filter(function(){ return true}); // [4, 7, 8]

答案 1 :(得分:1)

filter功能就是你所追求的。

var newArray = a.filter(function(item) {
  return item !== undefined;
});

答案 2 :(得分:0)

原始数组:

var originalArr = [];
a[1] = 4;
a[3] = 7;
a[4] = 8;

过滤逻辑:

function filterUndefined(originalArr){
    var valuesArray = [];
    for(var i = 0; i < originalArr.length; i++){
        if(originalArr[i] !== undefined){
          valuesArray.push(a[i]);
        }
        return valuesArray;
    }
}

<强>结果:

[4,7,8]

答案 3 :(得分:0)

关键是,无论何时在数组中设置索引而其他先前的索引都不存在,您的数组会使用未定义的值添加它们。如果你在这个阵列中有大量的数据,这不是一个好习惯。

你可以使用过滤器来实际过滤未定义的值,但重点是,当数组有大量数据时,你要做的是创建2个数组,第一个数组有很多带有未定义值的索引,这不是一个好的做法。我认为它更像是HashMap而不是Array

如果我在哪里,我会使用javascript对象,并像数组一样遍历它,你可以这样做:

var a={};
a[1]=4;
a[3]=7;
a[4]=8;
var keys = Object.keys(a);
for(var i=0;i<keys.length;i++){
    var value = a[keys[i]];
    //do whatever you want
}

答案 4 :(得分:0)

您可以考虑使用'键/值'对象而不是数组。

> var a={}; 
> a[1]=4; 
> a[3]=7; 
> a[4]=8;

请注意,区别在于您声明'a'的方式:a = {}而不是a = []。