iki nesne dizisini Angular 2 ve TypeScript ile birleştirmek?


92

Bu konuyla ilgili JavaScript sorularına baktım, bu soru özellikle TypeScript ile Angular2 hakkındadır.

Yapmaya çalıştığım şey, json nesnelerini bir diziye birleştirmek.

Kodum şuna benzer,

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

Nasıl arada kullanabilirsiniz data.resultsiçin this.resultstypescript ve açısal ile?

this._slugve this._nextsınıfa ayarlanır.

Teşekkürler.

Yanıtlar:


122

Bence aşağıdakilerden ziyade kullanmalısınız:

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

Gönderen concat doc :

Concat () yöntemi, argümanlar olarak sağlanan dizi (ler) ve / veya değer (ler) ile birleştirilerek çağrıldığı diziden oluşan yeni bir dizi döndürür.


1
ne yazık ki, bu Uint8arrays ile çalışmıyor :(
Frederick Nord

This.results boş veya tanımsız ise başarısız olabilir
Michael Freidgeim


35

Açılı 6 yayma operatörü ve concat çalışmaz. Kolayca çözebilirsiniz:

result.push(...data);

yöntemler arasında nesne referansını korurken bir çözüm ararken buraya geldi. bu mükemmel çalıştı. teşekkür ederim
jgritten

Bu dizileri birleştirmez, ikinciden birinciye veri ekler. İşi yapabilse de, orijinal diziyi değiştirdiği için dikkatli olunması gereken bir şeydir.
Davor

5

ES6 tarafından önerilen formu da kullanabilirsiniz:

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

Bu, dizinizi önce ( public results = [];) başlatırsanız çalışır ; Aksi yerine ...this.results,göre ...this.results ? this.results : [],.

Bu yardımcı olur umarım


2

bunu dene

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

0

İki dizim olduğunu varsayalım. İlki öğrenci detaylarına sahiptir ve öğrenci detayları işaretler. Her iki dizinin de ortak anahtarı vardır, yani 'öğrenci kimliği'

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 },
];

İki diziyi "öğrenciKimliği" anahtarına göre birleştirmek istiyorum. İki diziyi birleştirmek için bir işlev oluşturdum.

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

İşte nihai sonucu almak için kod

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}
]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.