修改JavaScript数组所有对象属性避免eslint no-param-reassign报错的方法
方案1:生成新数组(无副作用,推荐)
如果你不需要保留原数组的原有内容,优先用这种方式,返回新对象避免修改入参,完全符合eslint规则:
const newArr = arr.map(element => ({ ...element, name: 'common' }))
这里用对象扩展运算符拷贝原对象的所有属性,再覆盖name属性,全程没有修改element入参的任何属性,不会触发no-param-reassign报错。
方案2:直接修改原数组
如果你确实需要修改原数组而非生成新数组,可以通过遍历索引直接访问原数组元素修改,避开对入参的属性赋值:
arr.forEach((_, index) => { arr[index].name = 'common' })
这里我们不使用遍历拿到的元素参数做属性赋值,而是通过索引直接操作原数组的对应元素,同样不会触发eslint报错。
规则说明
你之前的写法触发报错是因为no-param-reassign规则默认禁止修改函数入参的属性,本质是为了避免无意义的副作用导致逻辑隐患,上面两种方案都从规则要求的层面规避了入参属性修改的操作,不需要加忽略注释即可通过校验。
内容的提问来源于stack exchange,提问作者rudeTool
相关产品推荐
相关产品推荐

