Estoy tratando de averiguar cuál es la mejor manera de lograr una copia superficial "desestructurada" reconstruida de un objeto. Quiero decir, ¿cómo puedo obtener un objeto al que se hace referencia con solo un subconjunto de claves, pero que están conectadas al objeto original? Desde let original={ a=1, b=2, c=3} hasta una referencia conectada let reconstructed= { a=1, c=3} ... los valores de las claves son cadenas o números. Intenté soluciones pero no puedo obtener una solución cómoda para esto. La ayuda sería apreciada.
Puede usar una matriz que contenga los accesorios que desea, y luego trucos sin sentido con getters y setters para construir un objeto que realmente lea/escriba en un objeto diferente.
Nota: Nunca he necesitado hacer esto. Creo que podría tener más suerte con un enfoque general diferente, como "Use el mismo objeto, pero solo muestre las propiedades que sean apropiadas en lugar de mostrarlas todas".
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);Esta podría ser la respuesta incorrecta porque su pregunta no está clara, especialmente con respecto a qué bit es la copia 'superficial'.
Su objeto reconstruido es un objeto nuevo e independiente y no está conectado al objeto de origen de ninguna manera.
let reconstructed = { a, b } // ^ ^ // denotes a new object La pregunta es, ¿qué tipos podrían a y b ? Si las propiedades deconstruidas del objeto de origen son en sí mismas referencias (otros objetos), la modificación del valor deconstruido, ya sea en su estado independiente o cuando se asigna al objeto reconstruido, también cambiará el valor de origen.
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)