循环中向以map为索引的数组添加元素时如何保留原有数据?
解决数组赋值覆盖原有数据的问题
你的问题出在每次循环都直接用新数组替换了mapArray[map]的原有内容,要实现追加新数据同时保留旧数据,只需要把新数组的元素合并到已有数组中即可,有两种常用写法:
写法1:扩展运算符合并
let placeHolder = facArray[key].filter(i => i.M == map).map(i => i.W) mapArray[map] = [...(mapArray[map] || []), ...placeHolder]
解释:mapArray[map] || []会先获取已有数组,如果mapArray[map]还未初始化(值为undefined),就用空数组代替,再通过扩展运算符把原有元素和新的placeHolder元素合并成新数组,赋值给mapArray[map]。
写法2:push方法追加
let placeHolder = facArray[key].filter(i => i.M == map).map(i => i.W) // 先初始化数组(如果不存在的话) if (!mapArray[map]) { mapArray[map] = [] } // 把新数据批量追加到数组末尾 mapArray[map].push(...placeHolder)
解释:先判断mapArray[map]是否存在,不存在就创建一个空数组,再用push(...placeHolder)把新数组的所有元素追加到已有数组后面,这种写法不会创建新数组,直接修改原数组,性能更优。
内容的提问来源于stack exchange,提问作者user2200809
相关产品推荐
相关产品推荐

