Transformation / manipulation de matrice

J'ai un tableau comme celui-ci:

array1=[{value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}] 

J'ai un deuxième ensemble d'entier:

 array2=[1,3] 

Je souhaite obtenir ce tableau sans boucle pour:

 arrayResult = ['value1', 'value3'] 

Est-ce que quelqu'un sait comment le faire avec javascript?

Merci d'avance

array2 les éléments dans array2 à la propriété label de l'élément dans array1 avec la value correspondante:

 array2 // Take array2 and .map( // map function(n) { // each element n in it to return array1 // the result of taking array1 .find( // and finding function(e) { // elements return // for which e.value // the value property === // is the same as n; // the element from array2 } ) .label // and taking the label property of that elt ; } ) ; 

Sans commentaires, et dans ES6:

 array.map(n => array1.find(e => e.value === n).label); 

Vous pouvez utiliser .filter et .map , comme ça

 var array1 = [ {value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'} ]; var array2 = [1, 3]; var arrayResult = array1.filter(function (el) { return array2.indexOf(el.value) >= 0; }).map(function (el) { return el.label; }); console.log(arrayResult); 

Une simple boucle devrait suffire à cela. À l'avenir, vous devriez publier un certain code pour montrer ce que vous avez essayé.

 var array1=[{value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}]; var array2=[1,3]; var result = []; for (var i = 0; i < array2.length; i++){ result.push(array1[array2[i]-1].label); } console.log(result); //["value1", "value3"] 

JSBIN

Bonne réponse à tous. Si je peux suggérer une autre alternative en utilisant Map , cela semble être adapté à une solution clé: value pair.

 var arr1 = [ {value:1, label:'value1'}, {value:2, label:'value2'}, {value:3, label:'value3'} ]; var arr2 = [1, 3]; // create a Map of the first array making value the key. var map = new Map( arr1.map ( a => [a.value, a.label] ) ); // map second array with the values of the matching keys var result = arr2.map( n => map.get ( n ) ); 

Bien sûr, cela suppose que la clé: la structure de valeur du premier tableau ne deviendra plus complexe et pourrait être écrite sous la forme la plus simple.

 var arr1 = [[1,'value1'], [2,'value2'], [3,'value3']]; // no need for names var arr2 = [1, 3]; var map = new Map( arr1 ); // no need to arr1.map ; var result = arr2.map( n => map.get ( n ) ); 

Indiquez simplement le premier tableau à l'aide de la fonction _.indexBy:

 var indexedArray1 = _.indexBy(array1, "value"); _.map(array2, function(x) { return indexedArray1[x].label; });