2つのオブジェクト配列をAngular2とTypeScriptでマージしますか?


91

私はこのトピックに関するJavaScriptの質問に出くわしました。この質問は、特にTypeScriptを使用したAngular2に関するものです。

私がやろうとしているのは、jsonオブジェクトを配列に連結することです。

私のコードは次のようになります、

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

どのようにして連結することができますdata.resultsthis.resultstypescriptですし、角度と?

this._slugthis._nextクラスに設定されています。

ありがとう。

回答:


121

私はあなたがむしろ以下を使うべきだと思います:

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

concat ドキュメントから:

concat()メソッドは、呼び出された配列と、引数として指定された配列や値、あるいはその両方で結合された新しい配列を返します。


1
残念ながら、それはUint8arraysでは機能しません:(
Frederick Nord

this.resultsがnullまたは未定義の場合、失敗する可能性があります
Michael Freidgeim


35

角度6スプレッド演算子連結では機能しません。あなたはそれを簡単に解決することができます:

result.push(...data);

メソッド間のオブジェクト参照を維持しながら、解決策を探してここに来ました。これは完璧に機能しました。ありがとう
jgritten

これは配列をマージせず、2番目のデータを最初の配列に追加します。それは仕事をすることができますが、元の配列を変更するので注意が必要です。
Davor

5

ES6で推奨されているフォームを使用することもできます。

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

これは、最初に配列を初期化した場合に機能します(public results = [];); それ以外の場合...this.results,...this.results ? this.results : [],。に置き換えます。

お役に立てれば



0

2つの配列があると仮定します。最初のものには学生の詳細があり、学生は詳細をマークします。両方の配列には共通のキー、つまり「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 },
];

キー「studentId」に基づいて2つの配列をマージしたいと思います。2つの配列をマージする関数を作成しました。

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

これが最終結果を得るためのコードです

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}
]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.