1
votes

Comment combiner 2 tableaux en 1 objet javascript

J'ai 2 tableaux que je veux "réduire" en 1 objet.

donc par exemple:

J'ai ..

var newOrderObject = originalData.reduce(function(newData) {
  var orderObject = {};
  originalData = newData;
  return orderObject;
}, {});

je veux combiner ces deux tableaux dans un objet qui ressemble à ceci:

var newOrderObject = {1:3, 2:1, 3:2};

im en utilisant une fonction de réduction mais il semble les mapper différemment

var originalData = [1,2,3];

var newData = [3,1,2];

toute suggestion serait appréciée


3 commentaires

Avez-vous essayé cela? stackoverflow.com/questions/10623635 /…


Je voudrais fusionner dans un objet ... je ne pense pas que je peux utiliser push (), non?


Copie possible de Création d'un objet JavaScript à partir de deux tableaux


3 Réponses :


6
votes

Réduisez le premier tableau (les clés) et prenez les valeurs du deuxième tableau en utilisant index:

var originalData = [1,2,3];
var newData = [3,1,2];

var newOrderObject = originalData.reduce(function(obj, key, index) {
  obj[key] = newData[index];
  return obj;
}, {});

console.log(newOrderObject);


0 commentaires

3
votes

Vous pouvez mapper des objets uniques et les affecter à un seul objet. Si des tableaux vides sont possibles, utilisez un objet vide comme valeur cible.

const transpose = (r, a) => a.map((v, i) => (r[i] || []).concat(v));

var keys = [1, 2, 3],
    values = [3, 1, 2],
    object = Object.assign(
        {},
        ...[keys, values]
            .reduce(transpose, [])
            .map(([k, v]) => ({ [k]: v }))
    );

console.log(object);

Une approche plus propre consisterait à transposer les tableaux en un tableau de paires clé / valeur, puis à mapper l'objet.

var keys = [1, 2, 3],
    values = [3, 1, 2],
    object = Object.assign({}, ...keys.map((k, i) => ({ [k]: values[i] })));

console.log(object);


1 commentaires

@Shidersz, avec un objet vide comme objet cible, il fonctionne avec des tableaux vides.



3
votes

Vous n'utilisez simplement pas .reduce .

  • Le 1er argument de son rappel est l’objet accumulateur que vous passe.
  • Le 2ème est l'élément actuellement itéré.
  • Le troisième est l'index.

Utilisez les 3 et vous obtenez le résultat souhaité.

var originalData = [1,2,3];
var newData = [3,1,2];

var newOrderObject = originalData.reduce(function(acc, item, i) {
  return Object.assign(acc, { [item]: newData[i] })
}, {});

console.log(newOrderObject)


0 commentaires