J'aime beaucoup cette fonction.
$matches = array('12', 'watt');
list($value, $unit) = $matches;
Y a-t-il un équivalent Javascript de cela ?
J'aime beaucoup cette fonction.
$matches = array('12', 'watt');
list($value, $unit) = $matches;
Y a-t-il un équivalent Javascript de cela ?
C'est le cas dans les versions "plus récentes" de Javascript : Mission de déstructuration - Javascript 1.7 . Il n'est probablement supporté que par les navigateurs basés sur Mozilla, et peut-être par Rhino.
var a = 1;
var b = 3;
[a, b] = [b, a];
EDITAR: En fait, je ne serais pas surpris que la bibliothèque Javascript V8 (et donc Chrome) prenne en charge cette fonctionnalité. Mais n'y comptez pas non plus Maintenant supporté par dans tous les navigateurs modernes( sauf IE bien sûr).
Super ! J'aime vraiment toutes les choses cool qu'ils ont mis dans les nouvelles versions de Javascript ! J'ai juste l'impression que nous ne pourrons pas les utiliser avant longtemps
Firefox le prend en charge depuis la version 2 en 2006. Il n'est toujours pas pris en charge par V8/Chrome en 2015. Chrome est le nouvel IE.
Voici ma solution pour utiliser List/Explode en Javascript. Exemple de travail de violon
D'abord la mise en œuvre :
var dateMonth = "04/15";
dateMonth.split("/").list("month","day", "year");
month == "04";
day == "15";
year == null;
Il permet également de délimiter les nouvelles variables générées :
var scoped = (function()
{
var dateMonth = "07/24/2013";
dateMonth.split("/").list("month","day", "year", this);
this.month == "07";
this.day == "24";
this.year == "2013";
})();
Pour ce faire, nous avons modifié le prototype 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;
}
}
Je m'en tiens à ma solution. Si vous essayez quelque chose comme : matches = ['12', 'watt'] ; [value, unit] = matches ; Or function () { var [year, month] = $(this).val().split("/") ; Dans Chrome, il y aura une erreur : "ReferenceError : Invalid left-hand side in assignment"
@Bergi il ne le fait que par défaut. Vous pouvez fournir un objet comme dernier paramètre et il l'utilisera.
Il existe une implémentation expérimentale de list()
par PHPJS ici :
https://github.com/kvz/phpjs/blob/master/_experimental/array/list.js
CoffeeScript offre une affectation de déstructuration avec la syntaxe :
[a, b] = someFunctionReturningAnArray()
Cette fonction est à peu près identique à celle proposée dans les toutes nouvelles versions de JavaScript. Cependant, CoffeeScript produit un JS compilé qui est compatible même avec le moteur JavaScript d'IE6, et c'est donc une bonne option si la compatibilité est vitale.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Ce qui ne va pas avec une approche standard
var value = matches[0]; var unit = matches[1];
7 votes
Eh bien, ce n'est pas très concis, n'est-ce pas ?
2 votes
Je n'ai jamais senti
list()
pour être utile et ce qui précède me semble être une objection.var power = { 'unit': 'watt', 'amount': 12 }
5 votes
C'est très laid et long. Je pense que list() rend le code plus lisible.
0 votes
@Gordon : Peu de fonctions retournent des objets, comme ''.match()
0 votes
@Znarkus : Je créerais toujours un ValueObject à partir du tableau, mais n'hésitez pas à le faire différemment :)
0 votes
@Gordon : list(power.unit, power.amount) = weirdStringToParse.match(massiveRegEx)
0 votes
@Znarkus var getPowerFromWeirdString = function(weirdString) {var power = weirdString.match(massiveRegEx) ; return {'unit' : power[0], 'amount' : power[1] } ; } ;
0 votes
Haha Gordon, tu pourrais aussi envelopper ma solution dans une fonction :)
0 votes
@Tchalvak l'ajout de dépendances externes n'est jamais plus coïncident.
0 votes
Voici une autre façon d'y parvenir : stackoverflow.com/a/9853132/675007
2 votes
PHP
list()
est pratique si vous voulez échanger des valeurs de variables sans avoir besoin d'une variable temporaire :list($b, $a) = array($a, $b);