Javascript equivalente a la lista de PHP ()

4 minutos de lectura

Javascript equivalente a la lista de PHP
Znarkus

Realmente me gusta esa función.

$matches = array('12', 'watt');
list($value, $unit) = $matches;

¿Hay un Javascript equivalente a eso?

  • ¿Qué tiene de malo un enfoque estándar? var value = matches[0]; var unit = matches[1];

    – Mark Elliot

    23 dic. 09 a las 18:17

  • Bueno, eso no es muy conciso, ¿verdad?

    – Kzqai

    23 dic. 09 a las 18:18

  • nunca me sentí list() para ser útil y lo de arriba solo me grita objeto var power = { 'unit': 'watt', 'amount': 12 }

    – Gordon

    23 dic. 2009 a las 18:29

  • Es muy feo y largo. Creo que list() hace que el código sea más legible.

    – Znarkus

    23 dic. 09 a las 18:30

  • PHP list() es útil si desea intercambiar valores de variables sin necesidad de una variable temporal: list($b, $a) = array($a, $b);

    – avatar

    11 oct.


Javascript equivalente a la lista de PHP
Nicolás

Hay, en versiones ‘más nuevas’ de Javascript: Asignación de desestructuración – Javascript 1.7. Probablemente solo sea compatible con navegadores basados ​​en Mozilla y tal vez en Rhino.

var a = 1;  
var b = 3;  

[a, b] = [b, a];  

EDITAR: en realidad, no me sorprendería si la biblioteca Javascript V8 (y, por lo tanto, Chrome) lo admite. Pero tampoco cuentes con eso
Ahora soportado en todos los navegadores modernos (excepto IE, por supuesto).

  • ¡Limpio! ¡Realmente me gustan todas las cosas geniales que han puesto en las nuevas versiones de Javascript! Parece que no podremos usarlos durante años.

    – Znarkus

    23 dic. 09 a las 18:38

  • Año 2015 y aún no soportado por V8.

    usuario1598585

    05 mar. 15 a las 19:21

  • Firefox lo admite desde la versión 2 en 2006. Todavía no es compatible con V8/Chrome en 2015. Chrome es el nuevo IE.

    – cronvel

    19 ago. 15 en 13:58

  • Tenga cuidado al usar esto todavía en 2018; IE nunca lo apoyó, y muchas personas todavía lo usan. Útil para juzgar la compatibilidad: kangax.github.io/compat-table/es6

    – Otoño Leonardo

    16 nov.

  • Informes de marzo de 2019. Esto funciona en Chrome 72 (64 bits).

    – akinuri

    15 mar. 19 a las 08:01

prueba esto:

matches = ['12', 'watt'];
[value, unit] = matches; 

Javascript equivalente a la lista de PHP
Ben fortuna

ES6 admite esto directamente ahora a través de desestructuración de matrices.

const matches = ['12', 'watt'];
const [value, unit] = matches;

  • A mediados de 2019, esta es la mejor respuesta. La respuesta aceptada arrojará “[variable] no está definido (no-undef)” advertencias en muchos linters. Esto corrige eso. Tenga en cuenta que también puede hacer la deconstrucción de matrices en bucles for…of

    – Tyler V.

    07 jun.

Esta es mi solución para usar List/Explode en Javascript.
Ejemplo de trabajo de violín

Primero la implementación:

var dateMonth = "04/15";
dateMonth.split("https://stackoverflow.com/").list("month","day", "year");
month == "04";
day == "15";
year == null;

También permite el alcance de las nuevas variables generadas:

var scoped = (function()
{ 
    var dateMonth = "07/24/2013"; 
    dateMonth.split("https://stackoverflow.com/").list("month","day", "year", this);
    this.month == "07";
    this.day == "24";
    this.year == "2013";
})();

Esto se logró modificando un prototipo de Array.

Array.prototype.list = function()
{
    var 
        limit = this.length,
        orphans = arguments.length - limit,
        scope = orphans > 0  && typeof(arguments[arguments.length-1]) != "string" ? arguments[arguments.length-1] : window 
    ;

    while(limit--) scope[arguments[limit]] = this[limit];

    if(scope != window) orphans--;

    if(orphans > 0)
    {
        orphans += this.length;
        while(orphans-- > this.length) scope[arguments[orphans]] = null;  
    }  
}

Hay una implementación experimental de list() por PHPJS aquí:
https://github.com/kvz/phpjs/blob/master/_experimental/array/list.js

  • El segundo enlace en esta publicación está muerto (404 – Esta no es la página web que buscas).

    – Pang

    25 ene.

1642380666 848 Javascript equivalente a la lista de PHP
00dani

CaféScript ofrece asignación de desestructuración con la sintaxis:

[a, b] = someFunctionReturningAnArray()

Esto es prácticamente idéntico a la función que se ofrece en versiones muy nuevas de JavaScript. Sin embargo, CoffeeScript produce JS compilado que es compatible incluso con el motor JavaScript de IE6 y, por lo tanto, es una buena opción si la compatibilidad es vital.

  • El segundo enlace en esta publicación está muerto (404 – Esta no es la página web que buscas).

    – Pang

    25 ene.

Dado que la mayoría de las implementaciones de JavaScript aún no admiten esa función, simplemente podría hacerlo de una manera más similar a JavaScript:

function list(){
    var args = arguments;
    return function(array){
        var obj = {};
        for(i=0; i<args.length; i++){
            obj[args[i]] = array[i];
        }
        return obj;
    };
}

Ejemplo:

var array = ['GET', "https://stackoverflow.com/users", 'UserController'];
var obj = {};

obj = list('method', 'route', 'controller')(array);

console.log(obj.method);        // "GET"
console.log(obj.route);         // "https://stackoverflow.com/users"
console.log(obj.controller);    // "UserController"

revisa el violín


Una alternativa es agregar un método de lista a Array.prototype (incluso yo no lo recomendaría):

Array.prototype.list = function(){
    var i, obj = {};
    for(i=0; i<arguments.length; i++){
        obj[arguments[i]] = this[i];
    }
    // if you do this, you pass to the dark side `,:,´
    this.props = obj;
    return obj;
};

Ejemplo:

/**
 * Example 1: use Array.prototype.props
 */

var array = ['GET', "https://stackoverflow.com/users", 'UserController'];
array.list('method', 'route', 'controller');

console.log(array.props.method);        // "GET"
console.log(array.props.route);         // "https://stackoverflow.com/users"
console.log(array.props.controller);    // "UserController"

/**
 * Example 2: use the return value
 */

var array = ['GET', "https://stackoverflow.com/users", 'UserController'];
var props = array.list('method', 'route', 'controller');

console.log(props.method);      // "GET"
console.log(props.route);       // "https://stackoverflow.com/users"
console.log(props.controller);  // "UserController"

Revisa el violín para ese

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad