You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

map函数中最后一个元素覆盖其他元素的原因及解决方法

问题分析与修复

原代码

var a = {};
var b = [1,2,3,4];
var c = ['a', 'b', 'c', 'd'];

b.map((i) => {
  c.map((j) => {
    a[j] = i
  })
});

console.log(a);

问题原因

你写的双重map逻辑完全错了:外层遍历b的每个元素i时,都会把c数组里的所有键j重新赋值成当前的i。比如第一次i=1,所有a['a']、a['b']、a['c']、a['d']都变成1;第二次i=2,又全改成2;直到最后一次i=4,所有键的值都被覆盖成4,所以最终输出全是4。

哪怕换成let的for循环,只要还是用外层循环每个i、内层循环所有c的键来赋值,结果肯定一样——这不是变量作用域的问题,是逻辑本身没对应上b和c的索引关系。

修复方法

要实现a的键对应c的元素、值对应b同索引元素的需求,直接按索引关联就行,不用双重循环:

方法1:用for循环遍历索引

var a = {};
var b = [1,2,3,4];
var c = ['a', 'b', 'c', 'd'];

for (let i = 0; i < b.length; i++) {
  a[c[i]] = b[i];
}

console.log(a); // 输出 {a:1, b:2, c:3, d:4}

方法2:用Array.map结合索引

var a = {};
var b = [1,2,3,4];
var c = ['a', 'b', 'c', 'd'];

c.map((key, index) => {
  a[key] = b[index];
});

console.log(a); // 输出 {a:1, b:2, c:3, d:4}

方法3:用Object.fromEntries(ES2019+)

var b = [1,2,3,4];
var c = ['a', 'b', 'c', 'd'];

const a = Object.fromEntries(c.map((key, index) => [key, b[index]]));

console.log(a); // 输出 {a:1, b:2, c:3, d:4}

内容的提问来源于stack exchange,提问作者Rajashekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:40:43