Existe-t-il un moyen plus simple dans lodash pour atteindre les objectifs suivants,

var o = _.reduce([2, 3, 7], function(acc, v, i) {
    acc[v] = i || "0";
    return acc;
}, {});

Résultat,

Object {2: "0", 3: 1, 7: 2}
4
Сухой27 9 mars 2016 à 12:38

3 réponses

Meilleure réponse

Depuis que tu as dit que tu voulais utiliser lodash

_.fromPairs(_.map(array, (elt, i) => [elt, String(i)]))

Cela fonctionne en transformant le tableau en un tableau de paires clé / valeur, que vous pouvez ensuite utiliser _.fromPairs pour transformer en objet.

Je ne le recommande pas vraiment, mais un monoplace utilisant ES6:

Object.assign({}, ...array.map((e, i) => ({[e]: String(i)})))

Cela fonctionne en créant un tas de petits objets à une propriété, puis en les répartissant sur la liste des paramètres de Object.assign qui les collera ensemble en un seul objet pour vous.

1
10 mars 2016 à 03:07

Essayez d'utiliser .reduce() avec une valeur de départ de empty object,

var obj = [2, 3, 7].reduce(function(a,b,i){
  return (a[b] = i, a);
}, {});

Si vous voulez qu'il soit encore plus court, utilisez la version E6,

var obj = [2, 3, 7].reduce((a,b,i) => (a[b] = i, a), {});
4
Rajaprabhu Aravindasamy 9 mars 2016 à 09:45

Une solution Javascript pure est

var obj = {}
[2, 3, 7].forEach(function(val, i) { obj[val] = i })

Obj est alors

Object {2: 0, 3: 1, 7: 2}

Pensez que c'est relativement simple et a une bonne lisibilité. Ce n'est pas complètement le même, car il n'a pas renvoyé la valeur, mais enregistrez-le dans la référence obj.

2
Kordi 9 mars 2016 à 09:55