JS中如何实现解构对象的浅拷贝

How to achieve shallow copy of destructured object in JS

我试图弄清楚什么是实现对象的重构“解构”浅拷贝的最佳方法。我的意思是,我怎样才能得到一个只有键子集的引用对象,但谁连接到原始对象?从 let original={ a=1, b=2, c=3} 到连接的引用 let reconstructed= { a=1, c=3}... 键的值是字符串或数字。我尝试了解决方法,但无法为此找到合适的解决方案。帮助将不胜感激。

这可能是错误的答案,因为您的问题不清楚,尤其是关于哪个位是 'shallow' 副本。

您的重构对象是一个新的独立对象,与源对象没有任何关联。

let reconstructed = { a, b }
           //       ^      ^
           //       denotes a new object

问题是,ab 可能是什么类型?如果从源对象解构的属性本身是引用(其他对象),那么修改解构值,无论是在其独立状态下,还是在分配给重构对象时,都会改变源值。

let foo = { a: 1, b: 2 }
let { a, b } = foo
a = 999
console.log(foo, a, b)

let bar = { baz: { msg: 'Hello World' } }
let { baz } = bar
let bar1 = { baz }
baz.msg = 'Hello Sailor'
console.log(bar, baz, bar1)

您可以使用包含所需道具的数组,然后使用 getter 和 setter 来构建一个对象,该对象实际上读取 from/writes 到另一个对象。

注意:我从来不需要这样做。我认为您可能会更幸运地使用不同的通用方法,例如“使用相同的对象,但只显示适当的属性而不是所有属性”。

let original={ a:1, b:2, c:3};
let propsInNewObject = ["a", "c"];

const reconstructed = propsInNewObject.reduce((obj, el) => {
  Object.defineProperty(obj, el, { 
    get: () => original[el],
    set: (value) => { original[el] = value },
    enumerable: true
  });
  return obj;
}, {});

console.log(reconstructed, original);
reconstructed.a = 100;
console.log(reconstructed, original);