减少和解构对象/分配

问题描述 投票:0回答:1

假设我有两个简单的对象,我想创建第三个对象,这些对象将连接它们的属性。这很完美:

(()=>{
  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功能的东西,我只是不了解。我该怎么做才能解决此问题?

javascript arrays javascript-objects
1个回答
1
投票

默认情况下,用defineProperty创建的属性不可枚举,因此它们不会包含在价差中。

要解决:

b2 = Object.entries(b1).reduce((acc, [key, value]) =>
  Object.defineProperty(acc, key, {value, enumerable: true})
), {})
© www.soinside.com 2019 - 2024. All rights reserved.