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

如何简写向对象指定键对应数组新增或创建元素的操作

更简洁的实现方案

你当前的if/else写法逻辑完全正确,只是重复书写时比较繁琐,以下是几种等价的精简写法:

  • 单行原生语法实现(推荐)
    直接使用ES2021标准的空值赋值运算符??=即可,仅当对应id的数组不存在时初始化空数组,逻辑和原有分支完全一致,TypeScript下可正常通过类型校验:

    (obj[id] ??= []).push("text");
    

    原理:??= 仅在左侧操作数为null或undefined时才会执行赋值,正好匹配「id不存在则新建数组」的需求,赋值表达式返回赋值后的数组,因此可以直接链式调用push。

  • 旧环境兼容写法
    如果你的目标运行环境不支持??=运算符,可以用逻辑或运算符实现相同效果。由于你的类型定义中所有属性值均为数组,空数组属于JavaScript真值,不会出现逻辑误判:

    (obj[id] = obj[id] || []).push("text");
    
  • 多位置复用方案
    如果这类操作在代码中出现频次很高,建议封装为通用工具函数,避免重复代码:

    function pushToArrayRecord<T>(
      record: Record<string, T[]>,
      key: string,
      value: T
    ) {
      (record[key] ??= []).push(value);
    }
    
    // 调用示例
    pushToArrayRecord(obj, id, "text");
    

以上所有写法和你原有if/else分支的行为完全一致,没有额外的性能损耗,你可以根据项目的环境支持情况和代码规范选择合适的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:27:17