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 estObject.fromEntrieset.filter, qui seraient plus fonctionnels, mais probablement plus longs