今天处理业务数据的时候遇到一个问题。 大概场景:有数组arr,每一项都是一个对象,对象里又套了对象。格式类似于
let arr = [
{
obja:{
name:'张三',
age:18
},
},
{
objb:{
name:'飘逸',
age:28
},
},
]
由于业务需求,需要使arr的每一项都有两个子对象,并且两个子对象的值相同。第一版的代码如下
arr.forEach((item)=>{
if(item.obja){
let obj = {}
obj.obja = item.obja
obj.objb = item.obja
item = obj
}else if(item.objb){
let obj = {}
obj.obja = item.objb
obj.objb = item.objb
item = obj
}
})
结果发现执行完毕后,arr并没有被改变。。。?这和我的印象不符啊,我记得forEach可以改变原数组啊。仔细分析后发现,以前用forEach改变object[]类型的数组,都是在数组中的某个对象的属性,没有对数组的某一项直接赋值过。查阅资料后得知,forEach确实不能直接改原数组,数组元素是简单类型时,forEach无论如何都不能改原数组。数组元素是复杂类型时,forEach对item直接整体赋值是不生效的,想修改的话,需要用点语法改其中的属性。