0
votes

Quelle est la meilleure façon de concocter / fusionner en dessous de deux matrices sans ordre de tri perturbant?

Exemple de tableau sont comme ci-dessous: xxx

après la fusion résultat doit ressembler à: xxx


1 commentaires

Juste boucle. Montrez votre code.


3 Réponses :


2
votes

Vous pouvez utiliser .ReRuce () code> pour réduire vos deux objets d'objets dans un objet, où la clé de l'objet est chaque date code> et chaque Date code> stocke une référence à l'objet entier. Toutefois, si une date répétée survient (c.-à-d. La date existe déjà dans l'objet accumulé), vous pouvez plutôt .concat () code> le tableau sur la matrice déjà existante. Enfin, en utilisant le tableau de commande des dates Nous avons initialement créé, vous pouvez mapper votre objet résultant dans un tableau d'objets fusionnés, comme:

p>

const aa = [{date: "sep", data:[1,2,3]}, {date: "oct", data:[4,5,6]}];
const bb = [{date: "oct", data:[1,2,3]}, {date: "nov", data:[40,50,60]}, {date: "dec", data:[41,51,61]}];

const merged = [...aa, ...bb];
const order = [...new Set(merged.map(({date}) => date))];

const mergedObj = merged.reduce((acc, {date, data, ...rest }) => {
  acc[date] = acc[date] || {date, ...rest, data: []};
  acc[date].data = acc[date].data.concat(data);
  return acc;
}, {});

const res = order.map(key => mergedObj[key]);
console.log(res);


0 commentaires

0
votes

Vous pouvez le faire en une seule à la boucle.

  
  const aa = [{date: "sep", data:[1,2,3]}, {date: "oct", data:[4,5,6]}];
    const bb = [{date: "oct", data:[1,2,3]}, {date: "nov", data:[40,50,60]}, {date: "dec", data:[41,51,61]}];
    
    let tempArr = aa;
    
bb.forEach(rec => { 
    let findIndex = tempArr.findIndex(obj => obj.date == rec.date);
    if(findIndex==-1){
       tempArr.push(rec);
       } else {
      tempArr[findIndex].data = tempArr[findIndex].data.concat(rec.data);
       }
    });
    console.log(tempArr);


0 commentaires

0
votes

Vous pouvez prendre un Plan et groupe par Date code> et obtenez de nouveaux objets comme jeu de résultats.

p>

.as-console-wrapper { max-height: 100% !important; top: 0; }


0 commentaires