如何向JavaScript对象的动态键添加数组值而非覆盖原有值?
问题描述
需求:向空对象中为动态获取的对应键添加值。
当前问题:以下代码会覆盖键的原有值,无法实现预期效果:
let obj = {}; let key; let value; key = // 从选择器获取 value = // 从选择器获取 obj[key] = value;
询问:如何将新值"push"到对应键而非替换原有值?
示例:若两次迭代均选择key1,对应值为value1和value2,期望最终对象为:
{"key1": ['value1', 'value2']}
解决方案
核心逻辑是先判断目标键的状态,再做对应处理:
- 如果键不存在,先给它初始化一个空数组
- 如果键已存在,直接把新值追加到对应数组里
基础实现代码
let obj = {}; let key; let value; key = // 从选择器获取 value = // 从选择器获取 // 处理逻辑 if (!obj[key]) { obj[key] = []; // 初始化空数组 } obj[key].push(value); // 将新值加入数组
简化写法(逻辑或运算符)
obj[key] = obj[key] || []; obj[key].push(value);
ES6+优雅写法(空值合并赋值运算符)
obj[key] ??= []; obj[key].push(value);
以上写法都能保证新值被追加到对应键的数组中,不会覆盖原有内容,最终得到数组格式的对象值。
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

