我最近遇到了一个问题,我想从数组中选择多个元素,以返回一个子数组。例如,给定数组:
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或类似的东西)。
答案 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。