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' }, ],
3 Réponses :
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 surarr2
Le moyen le plus efficace serait d'utiliser la première solution, selon ce JSPerf :
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);
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);
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.