如何根据数组b的索引调整数组a的元素索引?(JavaScript)
根据数组b的元素索引调整数组a的元素索引
现有数组:
const a = [4,3,2,1,5]; const b = [1,2,3,4,5];
需求是根据b中元素的索引调整a的元素索引,最终让a的输出结果为[1,2,3,4,5]。
实现方案
方案1:基于映射创建新数组(高效版)
先建立原数组a中元素与索引的映射关系,再根据b的元素顺序从a中取出对应元素,生成调整后的数组:
const a = [4,3,2,1,5]; const b = [1,2,3,4,5]; // 构建元素到原索引的映射表 const valueMap = new Map(); a.forEach((val, idx) => valueMap.set(val, idx)); // 根据b的顺序生成调整后的数组 const adjustedA = b.map(val => a[valueMap.get(val)]); console.log(adjustedA); // 输出: [1,2,3,4,5]
方案2:原地修改原数组(简洁版)
如果需要直接修改原数组而非创建新数组,可以先复制a的备份,再根据b的元素逐个替换原数组的对应位置:
const a = [4,3,2,1,5]; const b = [1,2,3,4,5]; const temp = [...a]; b.forEach((targetVal, idx) => { const originalPos = temp.indexOf(targetVal); a[idx] = temp[originalPos]; }); console.log(a); // 输出: [1,2,3,4,5]
逻辑说明
核心思路是:b数组的第i个元素值,就是调整后a数组第i个位置应该存放的元素。我们需要找到该元素在原a数组中的位置,再将其放到目标索引i处。
- 方案1用
Map存储映射,单个元素的查找时间为O(1),适合处理数据量较大的数组; - 方案2用
indexOf查找元素位置,实现更简洁,但查找时间为O(n),小数据量场景下足够高效。
内容的提问来源于stack exchange,提问作者Лунатик
相关产品推荐
相关产品推荐

