J'ai un tableau, qui contient un tableau d'objets. J'ai besoin d'extraire la valeur de propriété "id" des éléments qui ont des objets.

Exemple de tableau:

let myArray = [
    [ {id: "1"}, {id: "2"} ],
    [],
    [],
    [ {id: "3"} ]
]

Comment puis-je extraire et créer un tableau comme celui-ci:

["1", "2", "3"]

J'ai essayé ceci:

tagIds = myArray.map(id =>{id})
3
AlexFF1 16 avril 2018 à 18:04

4 réponses

Meilleure réponse

Vous pouvez utiliser reduce pour aplatir le tableau et utiliser map pour parcourir le tableau et renvoyer l'ID.

let myArray = [
  [{id: "1"}, {id: "2"}],
  [],
  [],
  [{id: "3"}],
];

let result = myArray.reduce((c, v) => c.concat(v), []).map(o => o.id);

console.log(result);
9
Eddie 16 avril 2018 à 15:07

Vous pouvez utiliser .concat() pour créer un tableau d'objets uniques puis .map() pour extraire les identifiants:

let myArray = [
  [{id: "1"}, {id: "2"}], [], [], [{id:"3"}]
];

let result = [].concat(...myArray).map(({ id }) => id);

console.log(result);

Documents:

2
Mohammad Usman 16 avril 2018 à 15:16

Une autre façon avec des boucles imbriquées simples:

let myArray = [
    [ {id: "1"}, {id: "2"} ],
    [],
    [],
    [ {id: "3"} ]
]   

//----------------------------------

let newArray=[];    
for (let i=0;i<myArray.length;i++){
    for (let j=0;j<myArray[i].length;j++){
    newArray.push(myArray[i][j].id);
  }
}
console.log(newArray); //outputs ['1','2','3']
2
treecon 16 avril 2018 à 15:15

Vous pouvez également écrire une fonction récursive pour que cela fonctionne avec n'importe quel nombre de tableaux, par exemple:

function extractIds(arr) {
    return arr.reduce((a, item) => {
        if (Array.isArray(item)) {
            return [
                ...a,
                ...extractIds(item)
            ];
        }

        return [
            ...a,
            item.id
        ];
    }, [])
}

extractIds([{id: 1}, [{id: 2}], {id: 3}, [{id: 4}, [{id: 5}, [{id: 6}]]]])

Le retour de extractIds sera [1, 2, 3, 4, 5, 6].

Notez que sans la partie récursive, vous vous retrouveriez avec quelque chose comme ceci: [1, 2, [3, {id: 4}, [{id: 5}]]] (Pas exactement comme ça, mais juste à titre d'exemple).

0
Mauricio Soares 16 avril 2018 à 15:28