unire due array di oggetti con Angular 2 e TypeScript?


91

Ho esaminato le domande JavaScript su questo argomento, questa domanda riguarda specificamente Angular2 con TypeScript.

Quello che sto cercando di fare è concatenare gli oggetti JSON a un array.

Il mio codice è simile a questo,

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

Come posso concatenarmi data.resultsa this.resultscon dattiloscritto e angolare?

this._sluge this._nextsono in classe.

Grazie.

Risposte:


121

Penso che dovresti usare piuttosto quanto segue:

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

Dal concat doc :

Il metodo concat () restituisce un nuovo array composto dall'array su cui è chiamato unito agli array e / o ai valori forniti come argomenti.


1
sfortunatamente, questo non funziona con Uint8arrays :(
Frederick Nord

Potrebbe fallire se this.results è nullo o non definito
Michael Freidgeim,


35

Con operatore di diffusione angolare 6 e concat non funziona. Puoi risolverlo facilmente:

result.push(...data);

è venuto qui cercando una soluzione mantenendo il riferimento agli oggetti tra i metodi. questo ha funzionato perfettamente. grazie
jgritten

Questo non unisce gli array, aggiunge i dati dal secondo al primo. Sebbene possa fare il lavoro, è qualcosa a cui prestare attenzione poiché modifica l'array originale.
Davor

5

Puoi anche utilizzare il modulo consigliato da ES6:

data => {
  this.results = [
    ...this.results,
    data.results,
  ];
  this._next = data.next;
},

Funziona se si inizializza prima l'array (public results = []; ); altrimenti sostituire ...this.results,con ...this.results ? this.results : [],.

Spero che sia di aiuto


2

prova questo

 data => {
                this.results = [...this.results, ...data.results];
                this._next = data.next;
            }

0

Supponiamo che io abbia due array. Il primo contiene i dettagli dello studente e i dettagli dei voti dello studente. Entrambi gli array hanno la chiave comune, ovvero '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 },
];

Voglio unire i due array in base alla chiave "studentId". Ho creato una funzione per unire i due array.

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

ecco il codice per ottenere il risultato finale

let result = mergeById(studentDetails, studentMark);

[
{"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}
]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.