我有两个数组,一个数据和一个索引:
var data = [
'h', 'e', 'l', 'l', 'o', ' '
];
var indices = [
4, 0, 5, 0, 1, 2, 2
];
我想创建第三个数组,使用data
的单元格按照indices
中指示的顺序,所以它在这里:
['o', 'h', ' ', 'h', 'e', 'l', 'l']
我知道我可以通过简单的循环轻松完成:
var newArray = new Array(indices.length);
for (var i in indices) {
var index = indices[i];
newArray.push(data[index]);
}
但是我想知道是否有更简洁的方法来做它,比如数组方法或特殊的构造函数?
答案 0 :(得分:5)
你可以使用.map
,就像这样
var data = [
'h', 'e', 'l', 'l', 'o', ' '
];
var indices = [
4, 0, 5, 0, 1, 2, 2
];
var res = indices.map(function (el) {
return data[el];
});
console.log(res);

map()方法创建一个新数组,其中包含调用a的结果 为此数组中的每个元素提供了函数。
答案 1 :(得分:2)
您也可以使用地图
var newArray = indices.map(function(i){
return data[i]
});
答案 2 :(得分:0)
您可以使用while循环:
var data = [
'h', 'e', 'l', 'l', 'o', ' '
];
var indices = [
4, 0, 5, 0, 1, 2, 2
];
var l = indices.length,
newArray = [];
while (l--)
newArray[l] = data[indices[l]];
console.log(newArray);