-1
votes

Concaténate des tableaux du même tableau en JavaScript

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"
    ]
  }
]


3 commentaires

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?


4 Réponses :


0
votes

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"
    ]
  }
]);


0 commentaires

1
votes

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);


3 commentaires

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



0
votes

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
}


0 commentaires

2
votes

Si je comprends correctement, c'est ce que vous voulez:

const [newHead] = otherArray.filter(({flag}) => flag));


1 commentaires

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