1
votes

Comment créer un objet basé sur le filtrage de deux tableaux avec un critère de filtre à partir d'un tableau en Javascript / ES6?

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?


1 commentaires

Votre code actuel est tout à fait raisonnable. Je ne le changerais pas (sauf pour le let -> const , et le == en === ). Une autre option est Object.fromEntries et .filter , qui seraient plus fonctionnels, mais probablement plus longs


3 Réponses :


0
votes

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)


0 commentaires

1
votes

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);


0 commentaires

0
votes

Utilisez l'utilitaire zipObject de lodash Voici une référence: https://lodash.com/docs/4.17.15#zipObject


0 commentaires