J'ai un tableau comme ceci:
[ { "id": 10002, "flag": false, "list": [ "aaa", "bbb" ] }, { "id": 10001, "flag": true, "list": [ "10002", "10003" ] }, { "id": 10003, "flag": false, "list": [ "ccc", "ddd" ] } ]
4 Réponses :
Vous pouvez cartographier sur la liste du premier élément et concéder toutes les listes de ces identifiants.
const mapItems = (input) => { const source = input[0].list; source.reduce((results, id) => { return results.concat(input.find(item => item.id === id).list); }, []); }; mapItems([ { "id": 10001, "list": [ "10002", "10003" ] }, { "id": 10002, "list": [ "aaa", "bbb" ] }, { "id": 10003, "list": [ "ccc", "ddd" ] } ]);
const array = [ { id: 10001, flag: true, list: ["10002", "10003"] }, { flag: false, id: 10002, list: ["aaa", "bbb"] }, { flag: false, id: 10003, list: ["ccc", "ddd"] } ]; const isHead = item => item.flag && item.id === 10001; const head = array.find(isHead); const rest = array.filter(item => !isHead(item)); const result = rest .flatMap(item => head.list.includes(item.id.toString()) && item.list ); console.log(result);
Oui, il fonctionne .. mais parfois des données telles que ceci [{"id": 10002, "drapeau": false, "liste": ["AAA", "BBB"]}, {"ID": 10001, "drapeau": vrai, "liste": ["10002", "10003"]}, {"id": 10003, "drapeau": false, "liste": ["" CCC "," DDD "]}] / code>
Si je comprenais votre correctement, le premier article doit être signalé, d'autres ne devraient pas être?
Nous ne pouvons pas prendre en premier comme la tête .. Peut être changé de position. alors quel objet a id == 10001 et flag === true uniquement comme tableau de tête
Vous pouvez récupérer les valeurs de la liste du premier objet dans la matrice comme arr [0] ['Liste'] code>
Une fois ces valeurs (10002.10003), vous pouvez extraire les valeurs de la liste des objets restants dans la matrice dont la touche d'identification correspond à l'une des valeurs ci-dessus.
if(arr[i]['id'] == 10002 || arr[i]['id'] == 10003){
//fetch the list values
}
Si je comprends correctement, c'est ce que vous voulez:
const [newHead] = otherArray.filter(({flag}) => flag));
Nous ne pouvons pas prendre en premier comme la tête .. Peut être changé de position. alors quel objet a id == 10001 et flag === true uniquement comme tableau de tête
utiliser array.splice
Et qu'avez-vous essayé d'atteindre la sortie souhaitée?
Je ne suis pas suivi. Vous souhaitez concaténer les listes pour le même ID?