0
votes

Afficher la valeur du tableau en fonction des valeurs d'un autre tableau

J'ai deux tableaux

var x = arry2.forEach(function(element, value){
        if (element.value == arry1){
          return element.value
        }
      });

je veux afficher le texte basé sur arry1 délimité par des virgules quelque chose comme ci-dessous:

exemple1, exemple2, exemple3

comment puis-je y parvenir?

     var arry1 = [1,2,3]
     var array2 = [
        { value: 1, text: 'example1' },
        { value: 2, text: 'example2' },
        { value: 3, text: 'example3' },
        { value: 4, text: 'example4' },
        { value: 5, text: 'example5' },
      ],


0 commentaires

3 Réponses :


0
votes

Vous pouvez mapper à travers chaque élément de arr1 pour trouver l'objet dans arr2 , et utiliser join pour créer une chaîne délimitée par des virgules.

var arr1 = [1, 2, 3]
var arr2 = [{value: 1,text: 'example1'},{value: 2,text: 'example2'},{value: 3,text: 'example3'},{value: 4,text: 'example4'},{value: 5,text: 'example5'}]

console.log(arr2.reduce((a, {value, text}) => (arr1.includes(value) && a.push(text), a), []).join(','))

Une autre façon serait d'utiliser réduire avec includes:

var arr1 = [1, 2, 3]
var arr2 = [{value: 1,text: 'example1'},{value: 2,text: 'example2'},{value: 3,text: 'example3'},{value: 4,text: 'example4'},{value: 5,text: 'example5'}]

console.log(arr1.map(v => arr2.find(o => o.value === v).text).join(','))

REMARQUE: La première méthode basera la commande à partir de arr1 , tandis que la seconde méthode basera la commande sur arr2

Le moyen le plus efficace serait d'utiliser la première solution, selon ce JSPerf :

JSPerf


0 commentaires

1
votes

Vous pouvez filtrer array2 et mapper la propriété souhaitée.

var array1 = [1, 2, 3],
    array2 = [{ value: 1, text: 'example1' }, { value: 2, text: 'example2' }, { value: 3, text: 'example3' }, { value: 4, text: 'example4' }, { value: 5, text: 'example5' }],
    result = array2
        .filter(({ value }) => array1.includes(value))
        .map(({ text }) => text);

console.log(result);


0 commentaires

1
votes

Vous pouvez réduire votre array2 à un objet de paires clé-valeur afin que vous puissiez utiliser le nombre stocké à valeur pour récupérer votre texte code > comme ceci:

const array1 = [1, 2, 3]
const array2 = [{value: 1, text: 'example1'}, {value: 2, text: 'example2'}, {value: 3, text: 'example3'}, {value: 4, text: 'example4'}, {value: 5, text: 'example5'}];

const lut = array2.reduce((a, {value, text}) => ({...a, [value]:text}), {});
const res = array1.map(num_key => lut[num_key]).join() // loop through each number and then display it's associated text from the look-up-table we generated
console.log(res);


1 commentaires

D'après ce que je comprends, cette solution a la meilleure complexité temporelle avec O (n + m). Itérer en appelant includes ou indexOf à chaque étape d'une itération comme dans d'autres solutions se produit avec O (n * m). Cela n'a pas d'importance pour les petits tableaux comme dans cet exemple, mais cela dépend des données réelles.