-2
votes

Algorithme de remplir dynamiquement une matrice JavaScript avec des zéros avant et après des valeurs

Je reçois des données de manière dynamique avec Python / Django et transmettez-la à mon modèle. Là, j'utilise JavaScript pour manipuler les données

Cela signifie que dans mon modèle, j'ai un tableau JavaScript, chaque chiffre représentant un mois comme:

mois = [1,2,3,4]

ou plus:

mois = [4,5,6]

ou plus:

mois = [6,7,8]

Selon le tableau ci-dessus, je voudrais peupler les positions manquantes avec des zéros. Les positions manquantes signifient que la matrice doit avoir une longueur de 12 à la fin. Chaque mois devrait être à la position précise. Par exemple:

mois = [1,2,3,4,0,0,0,0,0,0,0,0,0]

ou si

mois = [0,0,0,4,5,6,0,0,0,0,0,0,0]

ou si

mois = [0,0,0,0,0,6,7,8,0,0,0,0,0]

J'ai essayé beaucoup de choses. épissage semblait une bonne méthode mais n'a pas fonctionné comme prévu. Je ne pouvais pas le résoudre à l'aide de array.frillez . J'ai également essayé de créer un nouveau tableau avec 12 zéros, puis de repousser les valeurs de l'autre tableau, mais cela n'a pas fonctionné.

Quelqu'un peut-il me dire dans la bonne direction ou a une idée? Très apprécié.


1 commentaires

Il n'a pas fonctionné - Postez le code qui n'a pas fonctionné avec le comportement d'erreur / inattendu.


3 Réponses :


3
votes

faire une liste des 12 mois

true_months = [1,2,3,4,5,6,7,8,9,10,11,12] (ou true_months = liste (plage (1, 13)) )

alors votre variable

mois = [4,5,6]

et par un simple si / sinon dans A pour

[x si x en mois 0% 0 pour x dans true_months]

retournera

[0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0]


1 commentaires

Merci beaucoup pour votre réponse! Ça marche parfaitement!



6
votes

Vous pouvez prendre un nouveau tableau et le remplir avec les éléments de l'index, si trouvé ou avec zéro.

p>

const fill = m => Array.from({ length: 12 }, (_, i) => +m.includes(i + 1) && i + 1);

console.log(...fill([1, 2, 3, 4]));
console.log(...fill([4, 5, 6]));
console.log(...fill([6, 7, 8]));


1 commentaires

Merci beaucoup!! Fonctionne parfaitement



3
votes

Vous pouvez mapper mapper un tableau vide de 12 éléments, vérifiant si le numéro de mois est présent dans votre tableau source:

p>

const padZeroes =  arr => [...Array(12)].map((item,index) => arr.includes(index+1) ? index+1 : 0);

console.log(padZeroes([5,6,7,8]));


1 commentaires

J'ai accepté cette réponse parce que j'ai fini par utiliser et c'est juste une ligne de code. Merci à tous ceux qui ont partagé leurs idées!