fusionner deux tableaux d'objets avec Angular 2 et TypeScript ?


J'ai parcouru les questions sur JavaScript à ce sujet, cette question concerne spécifiquement Angular2 avec TypeScript.

Ce que j'essaie de faire, c'est concaténer les objets JSON à un tableau.

Mon code ressemble à quelque chose comme ceci,

public results: [];


public getResults(){
    this._service.get_search_results(this._slug, this._next).subscribe(
            data => {
                this.results.concat(data.results);
                this._next = data.next;
            },
            err => {
                console.log(err);
            }
        );
}

Comment puis-je concaténer data.results à this.results avec TypeScript et Angular ?

this._slug et this._next sont définis dans la classe.

merci.

Réponse #1

L'opérateur de propagation est plutôt cool.

this.results = [ ...this.results, ...data.results];

L'opérateur de propagation vous permet de placer facilement une version étendue d'un tableau dans un autre tableau.

Vous pouvez lire sur l'opérateur de propagation ici.

Réponse #2

Je pense que vous devriez plutôt utiliser ce qui suit :

data => {
  this.results = this.results.concat(data.results);
  this._next = data.next;
},

Extrait de la documentation concat :

La méthode concat() renvoie un nouveau tableau composé du tableau sur lequel elle est appelée, joint aux tableaux et/ou valeurs fournis en tant qu'arguments.

Réponse #3

Avec Angular 6, l'opérateur spread et concat ne fonctionnent pas. Vous pouvez le résoudre facilement :

result.push(...data);

Réponse #4

Supposons que j'ai deux tableaux. Le premier contient les détails des étudiants et les détails de leurs notes. Les deux tableaux ont la clé commune, qui est « studentId ».

let studentDetails = [
  { studentId: 1, studentName: 'Sathish', gender: 'Male', age: 15 },
  { studentId: 2, studentName: 'kumar', gender: 'Male', age: 16 },
  { studentId: 3, studentName: 'Roja', gender: 'Female', age: 15 },
  {studentId: 4, studentName: 'Nayanthara', gender: 'Female', age: 16},
];

let studentMark = [
  { studentId: 1, mark1: 80, mark2: 90, mark3: 100 },
  { studentId: 2, mark1: 80, mark2: 90, mark3: 100 },
  { studentId: 3, mark1: 80, mark2: 90, mark3: 100 },
  { studentId: 4, mark1: 80, mark2: 90, mark3: 100 },
];

Je veux fusionner les deux tableaux en fonction de la clé 'studentId'. J'ai créé une fonction pour fusionner les deux tableaux.

const mergeById = (array1, array2) =>
    array1.map(itm => ({
      ...array2.find((item) => (item.studentId === itm.studentId) && item),
      ...itm
    }));

voici le code pour obtenir le résultat final

let resultat=fusionnerParId(detailsEtudiants, noteEtudiant);

[
{"studentId":1,"mark1":80,"mark2":90,"mark3":100,"studentName":"Sathish","gender":"Male","age":15},{"studentId":2,"mark1":80,"mark2":90,"mark3":100,"studentName":"kumar","gender":"Male","age":16},{"studentId":3,"mark1":80,"mark2":90,"mark3":100,"studentName":"Roja","gender":"Female","age":15},{"studentId":4,"mark1":80,"mark2":90,"mark3":100,"studentName":"Nayanthara","gender":"Female","age":16}
]