keys javascript ecmascript-6 destructuring ecmascript-7

javascript - keys - object value



¿Cómo desestructurar todas las propiedades en el alcance/cierre actual en ES2015? (2)

Me gustaría hacer algo como esto:

const vegetableColors = {corn: ''yellow'', peas: ''green''}; const {*} = vegetableColors; console.log(corn);// yellow console.log(peas);// green

Parece que no puedo encontrar o descubrir cómo hacer esto, ¡pero realmente pensé que lo había visto en algún lugar antes! :PAGS

NOTA: Estoy usando Babel con el stage establecido en 0 ;

CONTEXTO: Estoy tratando de ser más seco en JSX y no hacer referencia a this.state o this.props todas partes. Y tampoco tiene que seguir agregando propiedades para desestructurar si los datos cambian.


Creo que está buscando la declaración with , hace exactamente lo que está pidiendo:

const vegetableColors = {corn: ''yellow'', peas: ''green''}; with (vegetableColors) { console.log(corn);// yellow console.log(peas);// green }

Sin embargo, está en desuso (en modo estricto, que incluye módulos ES6), por una buena razón.

Desestructurar todas las propiedades en el ámbito actual

No puedes en ES6 1 . Y eso es algo bueno . Sea explícito sobre las variables que está introduciendo:

const {corn, peas} = vegetableColors;

Alternativamente, puede extender el objeto global con Object.assign(global, vegetableColors) para ponerlos en el ámbito global, pero en realidad, eso es peor que una declaración with .

1: ... y aunque no sé si hay un borrador para permitir tales cosas en ES7, puedo decir que cualquier propuesta será eliminada por el TC :-)


Creo que estás buscando:

const {corn, peas} = vegetableColors;

Vive en el REPL de Babel

Si Pointy tiene razón en que está preguntando cómo hacer esto sin conocer los nombres de corn y peas , no puede hacerlo con una tarea de desestructuración.

Puede hacerlo solo en el ámbito global, utilizando un bucle, pero estoy seguro de que no desea hacerlo en el ámbito global. Aún así, por si acaso:

// I''m sure you don''t really want this, just being thorough Object.keys(vegetableColors).forEach((key) => { Object.defineProperty(this, key, { value: vegetableColors[key] }); });

(Lanzar enumerable: true allí si desea que estas pseudo-constantes sean enumerables).

Eso funciona a nivel global porque se refiere al objeto global.