如何向JavaScript对象中不存在的key对应的数组push元素
问题原因
你遇到的报错是因为首次访问obj[key]时,这个属性还没有被初始化,默认值为undefined,而undefined没有push方法,因此抛出TypeError: Cannot read property 'push' of undefined。
解决方案
方案1:循环内手动判断初始化
在访问obj[key]前先判断是否存在,不存在则赋值为空数组:
const obj = {} someArray.forEach(key => { if (!obj[key]) { obj[key] = [] } anotherArray.forEach(key2 => { obj[key].push(key2) }) })
方案2:使用逻辑或赋值运算符简化写法
ES2021新增的||=运算符可以简化判断逻辑,代码更简洁:
const obj = {} someArray.forEach(key => { obj[key] ||= [] anotherArray.forEach(key2 => { obj[key].push(key2) }) })
方案3:使用Map结构实现
如果可以用ES6的Map,也可以用Map替代普通对象,对不存在的键处理更规范:
const obj = new Map() someArray.forEach(key => { if (!obj.has(key)) { obj.set(key, []) } anotherArray.forEach(key2 => { obj.get(key).push(key2) }) })
内容的提问来源于stack exchange,提问作者AuroPick
相关产品推荐
相关产品推荐

