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

JavaScript中能否用一行代码为对象中未定义数组条件添加元素?

对象条件性添加数组的代码简化

需求与初始实现

我有一个以ID为键的对象,需要按条件为它添加数组。目前能用以下代码实现,但不想在函数里重复这段逻辑:

const myObj = {};
const myKey = '1233';
const myValue = true;

if (!(myKey in myObj)) {
    myObj[myKey] = [];
}
myObj[myKey].push(myValue);

排除的方案

我想实现类似myObj.upsert(myKey, myValue)的功能,但修改Object原型会有性能问题;用Object.create又会在TypeScript里产生大量问题,得把对象强制转成没有upsert方法的类型再传递,既冗余又不合理。

现有可行方案

于是我用了空值合并赋值运算符,效果很好:

const myObj = {};
const myKey = '1234';
const myValue = true;

myObj[myKey] ??= [];
myObj[myKey].push(myValue);

疑问:能否一行代码实现?

我原本以为这样写可以,但实际不行:

myObj[myKey] ??= [...myObj[myKey], myValue]

一行代码的解决方案

直接通过链式调用就能实现一行完成,写法如下:

(myObj[myKey] ??= []).push(myValue);

这个写法先通过??=确保myObj[myKey]是数组(不存在时初始化),然后立即调用push添加值,完美替代原来的两行代码。

你原来的写法失败是因为:当myObj[myKey]不存在时,...myObj[myKey]会试图展开undefined,直接抛出类型错误,而上面的写法先完成数组初始化,再执行添加操作,避免了这个问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:21:05