Javascript子数组

时间:2015-08-20 01:48:45

标签: javascript arrays

我最近遇到了一个问题,我想从数组中选择多个元素,以返回一个子数组。例如,给定数组:

a = [1, 5, 1, 6, 2, 3, 7, 8, 3]

索引数组:

i = [3, 5, 6]

我想选择a中的所有元素,i的索引出现在i中。所以我的简单示例中的输出将是:

[6, 3, 7]

我完全意识到我可以在i上使用for循环并构造一个新数组,然后使用Array.push([index(in i)])添加每个,但我想知道是否有更清晰/更清洁实现这一目标的方法(可能使用underscore.js或类似的东西)。

3 个答案:

答案 0 :(得分:3)

i.map(function(x) { return a[x]; })
// => [6, 3, 7]

答案 1 :(得分:0)

你可以试试这个

a = [1, 5, 1, 6, 2, 3, 7, 8, 3];
i = [3,5,6];
var res= [];     //for show result array
for (var n in a){      //loop a[]
 for(var index in i){     //loop i[]
     if(  n == i[index] )     //n is index of a[]
     res.push(a[n]);          //add array if equal n index and i[] value
 }
 }
 alert(res);    // 6,3,7 

答案 2 :(得分:0)

您可以使用map功能来达到理想的效果。

var a = [1, 5, 1, 6, 2, 3, 7, 8, 3];

var i = [3, 5, 6];

var mapped = i.map(function(index) { 
    return a[index]; 
});

console.log(mapped);

这是工作jsfiddle

但是,在上面的示例中,map尚未在所有浏览器中提供。以下是map的文档引用。

  

地图已添加到第5版的ECMA-262标准中;就这样吧   可能不存在于标准的所有实现中。

如果您的代码将在旧浏览器中运行,那么您需要添加polyfill。但是,有些库可以为旧版浏览器提供与polyfills类似的功能。与map函数一起,underscodejs还有许多其他有用的功能。我强烈建议您查看underscorejs提供的内容。它提供了大量的辅助功能,并具有相当广泛的浏览器支持。

您可以在underscorejs中执行以下操作,并且不必担心您的代码是否适用于跨浏览器。

var a = [1, 5, 1, 6, 2, 3, 7, 8, 3];

var mapped = _.map([3, 5, 6], function(index) {
    return a[index];
});

alert(mapped);

这是jsfiddle