0
votes

Réduisez les objets d'objets à un seul objet et appelez une fonction pour chaque objet individuel.

J'ai un tableau d'objets. J'ai besoin de transformer cela en objet d'objets. En essayant de le faire, je dois appeler une autre fonction pour chacun de l'objet.

Pourriez-vous m'aider avec cela? P>

code: p>

p>

{
  "0": {
    "type": "string",
    "id": "item-1"
  },
  "1": {
    "type": "string",
    "id": "item-2"
  }
}


11 commentaires

La production attendue est fausse. Vous cherchez des objets d'objets?


Votre sortie attendue n'est pas valide, elle utilise la notation d'objet, mais il n'y a pas de noms de propriété (dans l'objet extérieur). Quelle est la véritable sortie souhaitée?


" J'ai besoin de transformer cela en objet d'objets " serait-ce une matrice d'objets? Ou un objet contenant des propriétés et chacun est un objet? Si ce dernier, alors que doivent-ils être les clés?


En ce qui concerne votre édition: cela n'est toujours pas valide. Vous avez une clé avec un objet qui lui est associé, mais le second n'est pas correct. Si celles-ci sont dans un tableau ou attendez-vous deux clés?


BTW, en utilisant les propriétés dynamiques ID avec des numéros séquentiels pourraient être une odeur de code. Il serait bon de savoir pourquoi vous avez besoin de cela.


Sortie attendue n'est pas valide, vous ne pouvez pas avoir {{}} , l'objet sont des clés de fermeture / paires de valeurs. Il semble que vous souhaitiez peut-être un tableau [{}, {}] ou des touches de vos valeurs: {key1: {}, hey2: {}}


Désolé mon mauvais! J'ai mis à jour la sortie attendue.


@Sunny - Veuillez adresser le pourquoi une partie de Trincot's Question ci-dessus .


Je ne vais pas utiliser "ID" dans le code actuel. Ceci est juste pour créer des données factices pour la publier ici.


@Sunny - La question concerne pourquoi vous créez un objet avec les noms de propriété "0" et "1" , pas sur ID . Pourquoi ne pas continuer à utiliser un tableau?


Je ne peux pas l'utiliser comme une matrice car j'ai besoin de transmettre davantage le résultat comme un argument à une autre méthode, ce qui l'attend en tant qu'objet.


3 Réponses :


3
votes

Utiliser un objet avec des noms de propriétés telles que "0" code> et "1" code> est vraiment suspect. Je voudrais simplement continuer à utiliser un tableau, que vous pouvez facilement créer via carte code> (mais continue à lire pour les options d'objet non-arrayes):

function convertData() {
  var arr = {"items": [ {"type": "color"}, {"type": "number" }]};
  var result = {};
  for (var index = 0; index < arr.items.length; ++index) {
    result[index] = formatItems(arr.items[index]);
  }
  console.log(result);
}

function formatItems(item, index) {
  return {
    type: "string",
    id: "item-"+index
  };
}

convertData();


0 commentaires

0
votes

Vous devez passer initialvalue code> comme vide vide code> à réducteur.

Exemple: strong> p>

function convertData() {
 var arr = {"items": [ {"type": "color"}, {"type": "number" }]};
 const res = arr.items.reduce(function(acc, item, index) {
    const out = formatItems(item, index)

    //change this if you need an indexed keys, like acc[index] = out
    acc[out.id] = out
    return acc
 }, {});

   console.log(res);
}

function formatItems(item, index) {
  return {
    type: "string",
    id: "item-"+index
  }
}
convertData()


0 commentaires

2
votes

in ES6, vous pouvez Carte code> the arr.items code> et Spread La matrice résultante à l'intérieur {} code>. Cela crée un objet avec des indices de matrice en tant que propriétés

p>

function formatItems(item, index) {
  return { type: "string", id: "item-"+index }
}

const arr = { "items": [ {"type": "color"}, {"type": "number" }] };

const output = { ...arr.items.map(formatItems) } 
      
console.log(output)


4 commentaires

Utilisation du FormaTems , c'est simplement Laisser la sortie = {... arr.items.map.map (formatitems)}; Nice!


Je suppose que l'op avait besoin d'une solution ES5. Votre ES2015 + un était bien meilleur que le mien. :-) Je ne peux pas croire que je ne pensais pas à ça.


@TJCrowder Merci, j'ai mis à jour la réponse à ce que vous avez mentionné parce que le contenu de formatitems sont Dummy selon Op


Ce qui l'a améliorée de manière aussi légère, mais c'était déjà une très bonne réponse. :-)