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})
4 réponses
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);
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:
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']
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).
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.