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.