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

JavaScript中如何替换字典(Dictionary)的值?尝试方法无效

问题原因

你用Object.values(userInfo)[0] = userArray[0]没生效的核心原因是:Object.values()返回的是原对象值的全新数组,数组里存储的是数字(基本类型)的拷贝,修改这个临时数组的元素不会同步到原对象上,相当于你只是改了一个和原对象无关的数组元素,自然看不到原对象的变化。

可行的修改方法

方法一:直接遍历对象键修改(最直接)

不需要额外数组,直接遍历对象的键对值进行修改:

let userInfo = {'John': money(),'Mary': money(),'Bob': money()}

console.log('Before Dictionary:',userInfo)

// 遍历对象的所有键,直接修改对应值
Object.keys(userInfo).forEach(key => {
  userInfo[key] *= 2;
});

function money(){
    return Math.floor(Math.random() * 1000000);
}

console.log('After Dictionary: ',userInfo);

方法二:用Object.entries重构对象

把对象转成[键, 值]格式的数组,处理后再转回对象:

let userInfo = {'John': money(),'Mary': money(),'Bob': money()}

console.log('Before Dictionary:',userInfo)

// 转换为键值对数组→修改值→重建对象
userInfo = Object.fromEntries(
  Object.entries(userInfo).map(([key, value]) => [key, value * 2])
);

function money(){
    return Math.floor(Math.random() * 1000000);
}

console.log('After Dictionary: ',userInfo);

方法三:保留数组处理逻辑同步回对象

如果一定要先处理数组再同步到原对象,可以通过键数组的索引对应修改:

let userInfo = {'John': money(),'Mary': money(),'Bob': money()}

console.log('Before Dictionary:',userInfo)

let userArray = Object.values(userInfo);
userArray.forEach((element, index) => {
  userArray[index] = element * 2;
});

// 获取对象的键数组,按索引对应修改原对象
const keys = Object.keys(userInfo);
keys.forEach((key, index) => {
  userInfo[key] = userArray[index];
});

function money(){
    return Math.floor(Math.random() * 1000000);
}

console.log('Mutiplied array: ',userArray)
console.log('After Dictionary: ',userInfo);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:06:02