Realmente me gusta esa función.
$matches = array('12', 'watt');
list($value, $unit) = $matches;
¿Hay un Javascript equivalente a eso?
Znarkus
Realmente me gusta esa función.
$matches = array('12', 'watt');
list($value, $unit) = $matches;
¿Hay un Javascript equivalente a eso?
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;
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.
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"
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"
.
¿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 objetovar 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.