Supposons que j'ai deux tableaux de même longueur:
let arr_final = {}; for (const [i, v] of arr_one.entries()) { if (v != null) { arr_final[arr_two[i]] = v } };
Maintenant, je voudrais créer un objet appelé arr_final
qui utilise les valeurs de arr_two
comme clés
et les valeurs de arr_one
comme valeurs
pour arr_final
, mais uniquement pour les valeurs de arr_one
qui ne sont pas nulles
.
Le résultat souhaité serait donc:
const obj_final = {"a": 1, "b": 2, "d": 4, "f": 6}
Solution actuelle
Actuellement, j'ai une boucle for avec une vérification if à l'intérieur et je voudrais le changer en un code plus court:
const arr_one = [1,2,null,4,null,6]; const arr_two = ["a","b","c","d","e","f"];
Comment puis-je y parvenir avec un nombre minimal de code lignes?
3 Réponses :
Votre code semble optimal, voici une autre version de votre solution:
const arr_one = [1,2,null,4,null,6]; const arr_two = ["a","b","c","d","e","f"]; let arr_final={} arr_one.map((itm,indx)=>{ if(itm!==null){ arr_final[arr_two[indx]]=itm } }) console.log(arr_final)
Voici la plus courte approche à une ligne, qui ne nécessite qu'une itération de tableau
const arr_one = [1,2,null,4,null,6]; const arr_two = ["a","b","c","d","e","f"]; const fa = arr_one.reduce((a, e, i) => e ? { ...a, [arr_two[i]]: e } : a ,{}); console.log(fa);
Utilisez l'utilitaire zipObject de lodash Voici une référence: https://lodash.com/docs/4.17.15#zipObject a>
Votre code actuel est tout à fait raisonnable. Je ne le changerais pas (sauf pour le
let
->const
, et le==
en=== code >). Une autre option est
Object.fromEntries
et.filter
, qui seraient plus fonctionnels, mais probablement plus longs