假设我有两个简单的对象,我想创建第三个对象,这些对象将连接它们的属性。这很完美:
(()=>{
const a1 = {a: 2, b: 3}
const b1 = {a: 100, c: 5}
return {...a1, ...b1}
})()
// { a: 100, b: 3, c: 5 }
但是一旦尝试使用.reduce
创建一个从b1派生的新对象,它就会停止工作。为简单起见,让我们创建一个reduce函数,该函数简单地复制b1对象:
let r = (()=>{
const a1 = {a: 2, b: 3}
const b1 = {a: 100, c: 5},
b2 = Object.entries(b1).reduce((acc, [key, value])=>Object.defineProperty(acc, key, {value}), {})
console.log(b2) // {a: 100 c: 5}
return {...a1, ...b2}
})()
console.log(r);// { a: 2, b: 3 }
我有一种.reduce
功能的东西,我只是不了解。我该怎么做才能解决此问题?
默认情况下,用defineProperty
创建的属性不可枚举,因此它们不会包含在价差中。
要解决:
b2 = Object.entries(b1).reduce((acc, [key, value]) =>
Object.defineProperty(acc, key, {value, enumerable: true})
), {})