J'ai un tableau comme ceci: et je veux le convertir en objet comme celui-ci: p> 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. mais il ne produit rien.
L'un des exemples que j'ai essayés est le suivant: p>
Quelqu'un peut-il m'aider? P> p>
4 Réponses :
Utilisation de la réduction de la bibliothèque de Lodash, vous pouvez effectuer ce qui suit, où arr code> est votre tableau d'entrée. P>
_. 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;}, {}); code> p> p>
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!
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)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;
}
}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>
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 code> est un mauvais choix carArt code> suggère que la valeur est une matrice lorsque c'est un objet.converti code> 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!