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
相关产品推荐
相关产品推荐

