JavaScript:如何根据索引将数组值映射到另一个数组?
实现指定索引映射的方案
当然可以!你的思路方向完全正确,map()方法就是解决这个需求的绝佳工具,通过嵌套使用它就能轻松得到你想要的结果。
情况1:使用数组形式的templateArr
如果已经把模板转换成了数组templateArr,直接通过两层map()遍历就能完成映射:
const templateArr = [[0, 1, 2, 3, 4, 5],[0, 1, 2, 3, 4, 6]]; const myArray = ["Q","W","A","S","Z","X","E","R","D"]; const myResult = templateArr.map(indexGroup => { // 对每组索引,映射为myArray中对应位置的元素 return indexGroup.map(index => myArray[index]); }); console.log(myResult); // 输出:[["Q", "W", "A", "S", "Z", "X"],["Q", "W", "A", "S", "Z", "E"]]
简单解释下:
- 外层
map()遍历templateArr中的每一组索引集合 - 内层
map()把每组里的每个索引,替换成myArray对应位置的元素,最终组合成你要的结果数组
情况2:使用对象形式的template
如果保留原始的对象模板,只需要先提取对象的所有值,得到和templateArr一致的结构,再用上面的方法即可:
const template = {0: [0, 1, 2, 3, 4, 5], 1: [0, 1, 2, 3, 4, 6]}; const myArray = ["Q","W","A","S","Z","X","E","R","D"]; // 提取对象的所有值,得到索引数组的集合 const templateValues = Object.values(template); const myResult = templateValues.map(indexGroup => { return indexGroup.map(index => myArray[index]); }); console.log(myResult); // 同样输出目标结果
注意:ES6+中Object.values()会按照对象属性的插入顺序返回值,所以如果你的模板对象键是有序的,结果顺序会符合预期;如果键是无序的,你可以通过Object.keys(template).sort()排序后再取对应的值来保证顺序。
这种嵌套map()的方式不仅简洁直观,而且代码可读性很高,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者user4561667
相关产品推荐
相关产品推荐

