6 votes

Existe-t-il une fonction en javascript similaire au compact de php ?

J'ai trouvé compact fonction très utile (en php). Voici ce qu'elle fait :

$some_var = 'value';
$ar = compact('some_var');
//now $ar is array('some_var' => 'value') 

Il crée donc un tableau à partir des variables que vous spécifiez, lorsque la clé des éléments est le nom de la variable. Existe-t-il un type de fonction en javascript ?

9voto

Carlos B Points 384

Vous pouvez utiliser ES6/ES2015 Initialisateur d'objet

Exemple :

let bar = 'bar', foo = 'foo', baz = 'baz'; // declare variables

let obj = {bar, foo, baz}; // use object initializer

console.log(obj);

{bar: 'bar', foo: 'foo', baz: 'baz'} // output

Attention aux compatibilités entre navigateurs, vous pouvez toujours utiliser Babel

4voto

Explosion Pills Points 89756

Non, il n'y a pas de fonction analogue ni de moyen d'obtenir les noms/valeurs des variables pour le contexte actuel -- seulement s'il s'agit de variables "globales" sur window ce qui n'est pas recommandé. S'ils le sont, vous pouvez faire ceci :

function compact() {
    var obj = {};
    Array.prototype.forEach.call(arguments, function (elem) {
        obj[elem] = window[elem];
    });
    return obj;
}

0voto

Yogesh Suthar Points 19002

Vous pouvez également utiliser bibliothèque phpjs pour utiliser la même fonction en javascript comme en php

Exemple

var1 = 'Kevin'; var2 = 'van'; var3 = 'Zonneveld';
compact('var1', 'var2', 'var3');

Sortie

{'var1': 'Kevin', 'var2': 'van', 'var3': 'Zonneveld'}

0voto

ericsicons Points 690

Si les variables ne sont pas dans la portée globale, c'est encore possible, mais pas pratique.

function somefunc() {
    var a = 'aaa',
        b = 'bbb';

    var compact = function() {
        var obj = {};
        for (var i = 0; i < arguments.length; i++) {
            var key = arguments[i];
            var value = eval(key);
            obj[key] = value;
        }
        return obj;
    }
    console.log(compact('a', 'b')) // {a:'aaa',b:'bbb'}
}

La bonne nouvelle, c'est que l'ES6 dispose d'une nouvelle fonctionnalité qui permet d'y parvenir.

var a=1,b=2;
console.log({a,b}) // {a:1,b:2}

Prograide.com

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.

Powered by:

X