项目场景:
当我在数组遍历循环中用Object.assign()进行合并对象,但是数组里合并的对象默认都为最后一个值了
问题描述
当我想得到数组里的对象和b进行合并的返回值的时候,返回的结果确实另一种情况
const arr = [
{ a: 1 },
{ a: 2 },
{ a: 3 },
]
const b = { c: 1 }
const res = arr.map((item) => {
return Object.assign(b, item)
})
console.log(res);
料想的结果应该是:
但实际是
原因分析:
Object.assign(target, …sources)
- target是目标对象,接收源对象属性的对象,也是修改后的返回值。
- sources 源对象,包含将被合并的属性
该方法返回目标对象本身,而不是创建一个新对象。
解决方案:
Object.assign(target, …sources),改变target的值,加一个空对象就好了
Object.assign({},target, …sources)
const arr = [
{ a: 1 },
{ a: 2 },
{ a: 3 },
]
const b = { c: 1 }
const res = arr.map((item) => {
return Object.assign({},b, item)
})
console.log(res);