3
votes

Mapper les deux tableaux et copier le résultat dans un nouveau tableau

 array1 = [{
        "id": 1,
        "name": "aaa",
      },
      {
        "id": 2,
        "name": "bbb"
      },
{
        "id": 5,
        "name": "ccc"
      },
      {
        "id": 6,
        "name": "ddd"
      },
{
        "id": 8,
        "name": "eee"
      },
      {
        "id": 12,
        "name": "fff"
      }]

array2 = [ 5, 6, 8 ,12]
Resulting Array = [ {name: "ccc"}, {name: "ddd"} , {name: "eee"}, {name: "fff"} ]I am looking to map both arrays to get matching id numbers and get copy the names in the resulting arrray but I didn't succeed. Can you please suggest me how to do it?Thank you

4 commentaires

Vous ne pouvez pas avoir de paires nom: valeur dans un tableau, ce n'est autorisé que dans les objets.


Parcourez array1 . Testez si element.id est dans array2 . Si c'est le cas, poussez {name: element.name} dans le tableau résultant.


Merci pour la suggestion. J'ai édité la question


Avec quoi avez-vous des problèmes? Savez-vous comment boucler sur un tableau? Savez-vous comment tester si une valeur est dans un tableau? Savez-vous comment insérer quelque chose dans le tableau de résultats? Si vous répondez oui à toutes ces questions, mettez-les toutes ensemble.


3 Réponses :


1
votes

Commençons par transformer array1 en un objet, qui mappe les identifiants aux objets correspondants:

var result = array2.map(function(id) {
    return idMap[id]
});

Vous pouvez ensuite obtenir le résultat souhaité en faisant p >

var idMap = {}
array1.forEach(function(element) {
    idMap[element.id] = element
})


0 commentaires

1
votes

Vous pouvez essayer ce qui suit. Fondamentalement, vous filtrez le premier tableau en fonction de l'existence ou non de l'identifiant dans le deuxième tableau, puis vous le mappez en sélectionnant uniquement la ou les clés souhaitées.

var resultArray = array1.filter(function(arr) {
    return array2.indexOf(arr.id) !== -1;
}).map(function(item) {
    return {
        name: item.name
    };
});


0 commentaires

1
votes

Essayez ceci:

array1 = [{"id": 1,"name": "aaa"},{"id": 2,"name": "bbb"},{"id": 5,"name": "ccc"},{"id": 6,"name": "ddd"},{"id": 8,"name": "eee"},{"id": 12,"name": "fff"}] ;

array2 = [ 5, 6, 8 ,12];

var result = array1.filter(item => array2.includes(item.id)).map(({id,name}) => ({name}));

console.log( result );


0 commentaires