Por ejemplo si tengo dos objetos:
var foo = {
x: "bar",
y: "baz"
}
y
var oof = {}
y quería transferir los valores x e y de foo a oof. ¿Hay alguna manera de hacerlo usando la sintaxis de desestructuración es6?
quizás algo como:
oof{x,y} = foo
javascript
ecmascript-6
destructuring
majorBummer
fuente
fuente
Object.assign(oof, foo)
Object.assign
Respuestas:
Si bien feo y un poco repetitivo, puedes hacer
que leerá los dos valores del
foo
objeto y los escribirá en sus ubicaciones respectivas en eloof
objeto.Personalmente prefiero leer
o
aunque.
fuente
var oof = {};
.({x: oof.x, y: oof.y} = foo)
? Creo que has puesto un f extra en oof .No, la desestructuración no admite expresiones de miembros en shorthands, sino solo nombres de propiedad simples en el momento actual. Se ha hablado de eso en esdiscuss, pero ninguna propuesta llegará a ES6.
Object.assign
Sin embargo, es posible que pueda usarlo : si no necesita todas las propiedades propias, aún puede hacerlofuente
--harmony_destructuring
habilitado. Veo "SyntaxError: token inesperado".{oof.x, oof.y} = foo
. O tal vez realmente lo había extrañado.OMI, esta es la forma más fácil de lograr lo que estás buscando:
Básicamente, desestructurar en variables y luego usar la abreviatura inicializador para hacer un nuevo objeto. No hay necesidad de
Object.assign
Creo que esta es la forma más legible, de todos modos. Por la presente, puede seleccionar los accesorios exactos de los
someObject
que desea. Si tiene un objeto existente en el que solo desea fusionar los accesorios, haga algo como esto:Otra forma, posiblemente más limpia, de escribirlo es:
Lo uso
POST
mucho para solicitudes en las que solo necesito algunos datos discretos. Pero, estoy de acuerdo en que debería haber una línea para hacer esto.EDITAR: PD: ¡recientemente aprendí que puedes usar la ultradesestructuración en el primer paso para extraer valores anidados de objetos complejos! Por ejemplo...
Además, puede usar el operador de propagación en lugar de Object.assign al hacer un nuevo objeto:
O...
fuente
Además de
Object.assign
la sintaxis de propagación de objetos, que es una propuesta de Etapa 2 para ECMAScript.Pero para usar esta función, debe usar
stage-2
otransform-object-rest-spread
plugin para babel. Aquí hay una demostración en babel constage-2
fuente
Complemento BabelJS
Si está utilizando BabelJS , ahora puede activar mi complemento
babel-plugin-transform-object-from-destructuring
( consulte el paquete npm para la instalación y el uso ).Tuve el mismo problema descrito en este hilo y para mí fue muy agotador cuando creas un objeto a partir de una expresión destructiva, especialmente cuando tienes que cambiar el nombre, agregar o eliminar una propiedad. Con este complemento, mantener tales escenarios se vuelve mucho más fácil para usted.
Ejemplo de objeto
Se puede escribir como:
Ejemplo de matriz
Se puede escribir como:
fuente
let myTest = { test1, test3 } = myObject;
no funcionaEs totalmente posible Simplemente no en una declaración.
(Tenga en cuenta el paréntesis en torno a la declaración.) Pero tenga en cuenta que la legibilidad es más importante que el golf de código :).
Fuente: http://exploringjs.com/es6/ch_destructuring.html#sec_assignment-targets
fuente
Puede usar la reestructuración para eso de esta manera:
O combine ambos objetos si oof tiene valores:
fuente
oof = {...oof, ...foo}
Puede devolver el objeto desestructurado en una función de flecha y usar Object.assign () para asignarlo a una variable.
fuente
SECO
o
fuente
Puede destruir un objeto asignando directamente a otro atributo de objeto.
Ejemplo de trabajo:
Puede trabajar con la destrucción utilizando variables con el mismo nombre de atributo de objeto que desea capturar, de esta manera no necesita hacer:
Use de esta manera:
De la misma manera, puede establecer nuevos valores para las estructuras de objetos si tienen el mismo nombre de atributo.
Mira este ejemplo de trabajo:
fuente
Esto funciona en cromo 53.0.2785.89
fuente
oof
solo recibe una referenciafoo
y evita toda la desestructuración (al menos en Chrome).oof === foo
ylet oof = { x } = foo
aún regresa{ x, y }
Se me ocurrió este método:
Que puedes usar así:
es decir, puede elegir qué propiedades desea y colocarlas en un nuevo objeto. A diferencia
_.pick
, también puede cambiarles el nombre al mismo tiempo.Si desea copiar los accesorios en un objeto existente, simplemente configure el
dest
argumento.fuente
Esto es una especie de trampa, pero puedes hacer algo como esto ...
En la práctica, creo que raramente querrás usar eso. Lo siguiente es MUCHO más claro ... pero no tan divertido.
Otra ruta completamente diferente, que incluye mucking con el prototipo (cuidado ahora ...):
fuente
Esta es la solución más legible y más corta que se me ocurrió:
Saldrá
{ isValidDate: 'yes' }
Sería bueno algún día poder decir algo así,
let newProps = ({ isValidDate } = props)
pero desafortunadamente no es algo que ES6 admita.fuente
No es una manera hermosa, ni la recomiendo, pero es posible de esta manera, solo por conocimiento.
fuente
Puede usar métodos de clase JSON para lograrlo de la siguiente manera
Pase las propiedades que deben agregarse al objeto resultante como segundo argumento para
stringify
funcionar en un formato de matriz.MDN Doc para JSON.stringify
fuente