如何简写向对象指定键对应数组新增或创建元素的操作
更简洁的实现方案
你当前的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
相关产品推荐
相关产品推荐

