0
votes

Convertissez un tableau de tableaux en tant que éléments à l'objet d'objets comme éléments

J'ai un tableau comme ceci: xxx

et je veux le convertir en objet comme celui-ci: xxx

comme vous Peut voir que tous les éléments du premier tableau (ARR) sont des matrices et que l'élément de ces tableaux est des cordes ou des chiffres ou les deux.
L'un des exemples que j'ai essayés est le suivant: xxx

mais il ne produit rien.
Quelqu'un peut-il m'aider?


3 commentaires

S'il vous plaît poster le code que vous avez essayé. Et où exactement vous êtes coincé?


Répondu ci-dessous. Veuillez envisager une variable nommée avec soin. convertid_arr est un mauvais choix car Art suggère que la valeur est une matrice lorsque c'est un objet. converti serait un mauvais choix car il est essentiellement de sens. Choisissez un nom qui indique le but / sens de la valeur de votre solution finale. Bonne chance!


@Sunil Exemple donné! J'espère que vous pourrez m'aider avec ça!


4 Réponses :


-1
votes

Utilisation de la réduction de la bibliothèque de Lodash, vous pouvez effectuer ce qui suit, où arr est votre tableau d'entrée.

_. Réduire (Arr, fonction (ACC, VAL) {var k1 = val [0], k2 = val [1], val = val.slice (2); ACC [K1] = ACC [ k1] || {}; ACC [k1] [k2] = val; renvoyer acc;}, {});


2 commentaires

Vous suggérez une bibliothèque L'OP n'a pas mentionné, plus, est disponible maintenant dans la plupart des navigateurs modernes de manière native, sans une bibliothèque.


Accordé Darren, cependant, l'OP n'a pas dit qu'il visant un navigateur moderne, Lodash est omniprésent afin qu'il l'utilise probablement déjà, et il découvrira une bibliothèque utile qui le tiendra de bonne place s'il ne le savait pas déjà . Je suis donc allé pour la version plus sûre et potentiellement plus éducative. L'expressivité des JS plus récents est une joie à voir!



3
votes

Vous pouvez utiliser Réduire Code> Strong> et Destructurant comme ceci:

p>

var arr = [
    ['a1','b1','c1','d1'],
    ['a1','e1','i1','j1'],
    ['a1','f1','k1','l1'],
    ['a1','g1','m1','n1'],
    ['a1','h1','o1','p1'],
    ['a2','b2','c2','d2'],
    ['a2','e2','i2','j2'],
    ['a2','f2','k2','l2'],
    ['a2','g2','m2','n2'],
    ['a2','h2','o2','p2']
];

const newArray = arr.reduce((acc, [key, key2, ...rest]) => {
  acc[key] = acc[key] || {};
  acc[key][key2] = rest
  return acc;
}, {})

console.log(newArray)


0 commentaires

-1
votes

Voici un exemple simple qui travaille pour une liste de listes (selon vos exemples), avec la taille minimale des tableaux de feuille étant passés sous forme de paramètre (dans votre cas réglé sur 2).

Le mappage extrait une clé et s'accumule Tableaux, tandis que la normalisation réduit les matrices récursives, jusqu'à ce qu'un résultat satisfaisant ait été atteint. p>

p>

var arr = [
    ['a1','b1','c1','d1'],
    ['a1','e1','i1','j1'],
    ['a1','f1','k1','l1'],
    ['a1','g1','m1','n1'],
    ['a1','h1','o1','p1'],
    ['a2','b2','c2','d2'],
    ['a2','e2','i2','j2'],
    ['a2','f2','k2','l2'],
    ['a2','g2','m2','n2'],
    ['a2','h2','o2','p2']
];

console.log(transform(arr, 2));

function transform(input, minSize) {

  return normalize(map(input, {}), minSize);

  function map(input, result) {
    for (var ii = 0; ii < input.length; ii++) {
      var row = input[ii];
      if (row.length == 0) {
        continue;
      }

      var first = row[0];
      var list = result[first] || (result[first] = []);
      list.push(cdr(row));
    }
    return result;
  }

  function normalize(result, minSize) {
    for (var key in result) {
      var list = result[key];
      if (list.length == 0) {
        continue;
      }
      var first = list[0];
      if (list.length == 1 && first.length <= minSize) {
        result[key] = first;
        continue;
      }
      result[key] = transform(list, minSize);
    }
    return result;
  }

  function cdr(list) {
    var result = [];
    for (var ii = 1; ii < list.length; ii++) {
      result.push(list[ii]);
    }
    return result;
  }
}


0 commentaires

0
votes

Vous êtes sur la bonne voie. Juste la fonction d'utilisation était fausse. J'ai réutilisé le code et j'ai mis à jour cela pour le faire fonctionner correctement. Pour $. Chercher une fonction, la première valeur est l'index ( docs ) qui était la principale cause d'erreur.

J'ai mise à jour le code et ça fonctionne bien. p>

p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


0 commentaires