Soy nueva en javascript y aquí hay una pregunta para novatos:

En php, hay un extract () método que puede importar variables de un matriz asociativa. Por ejemplo:

$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");
extract($var_array);
// $color is a defined varible here with the value of "blue"

Me pregunto si hay un método en Javascript estándar, o en bibliotecas populares como jQuery o guión bajo, que hace lo mismo para un objeto Javascript. Me refiero a algo como esto:

jsObject = {"color" : "blue",
            "size"  : "medium",
            "shape" : "sphere"};

extract(jsObject); // Is there such a thing?

// Here, color is a defined variable
1
t.m. 16 feb. 2017 a las 11:09

4 respuestas

La mejor respuesta

Puedes hacer algo como esto:

Object.getOwnPropertyNames(obj).forEach(k => window[k] = obj[k]);

O para limitar el alcance de las nuevas variables:

Object.getOwnPropertyNames(obj).forEach(k => this[k] = obj[k]);
3
Titus 16 feb. 2017 a las 08:17

Hay 2 problemas con el uso del objeto window :

  1. Él y todas sus propiedades son variables globales predeterminadas. Lo que puede no ser de interés.

  2. Debe suponerse que existe en todos los navegadores (que es ahora). Piensa en Nodejs

Usted puede hacer:

for (var key in jsObject) {
    eval('var ' + key + ' = ' + jsObject[key]);
}

Pruebe esto, podría ayudar:

(function () {
    var jsObject = {color: 'blue'};

    // Dynamically assign to local variables
    for (var key in jsObject) {
        eval('var ' + key + ' = ' + jsObject[key]);
    }

    // Test locally
    console.log(color);
})();

// Test globally
console.log(color);

Resultados:

'blue'
[error] color is not defined
0
Timothy Quang Phuc Nguyen 16 feb. 2017 a las 08:46

Puede usar

function extract(jsObject){
    for (var key in jsObject) {
       window[key] = jsObject[key];
    }
}




 console.log(size)   //medium
2
Arjun T Raj 16 feb. 2017 a las 08:16

No hay nada en Javascript estándar que funcione así, pero si usa ES6 puede desestructurar sus objetos de esta manera

const obj = {
    color: 'blue',
    size: 'medium',
    shape: 'sphere',
}

const { color, size, shape } = obj;

console.log(color, size, shape) // blue medium sphere

Puede usar Babel para transpilar su código a ES6. Puede ser un poco avanzado para usted ahora si recién está comenzando, así que le recomiendo que siga con el enfoque intuitivo, pero después de unas semanas definitivamente eche un vistazo a Babel. Te da algunas cosas realmente geniales.

2
TrillCyborg 16 feb. 2017 a las 08:25