2017-04-04 24 views
1

スプライス配列と観測...私持っている私に、オブジェクトの配列を返す関数、クラス内で宣言さ2つの配列を埋める角度2 - 私は、角2でフォームを作成しました

public getList(){ 
return this.http.get(`${APPCONSTANTS.API_PATH}/list/`) 
    .map(res => <myType[]> res.json()) 
    .catch(error => { 
     console.log(error); 
     return Observable.throw(error); 
    });} 

export class ContestAdmComponent { 

public firstArray [] = []; 
public secondArray[] = []; 

test(){ 
this.myService.getList() 
    .subscribe(
     _data => { 
      this.firstArray = _data; 
      this.secondArray= _data; 
     }, 
     e => console.log('onError: %s', e), 
     () => console.log('onCompleted') 
    ); 
} 

}

今は最初の配列を空にする(それはUIによって変更された)2つ目でそれを補充しなければならないが、私はまたfirstArrayとを削除するsecondArrayが空になる

private testDelete(){ 
    console.log('pre delete : ' + this.secondArray.length) 
    this.firstArray .splice(0,this.firstArray.length); 
    console.log('post delete : ' + this.secondArray.length) 
} 

前削除:154 記事は削除:0

私はこのbehaviuorの懸念観測可能だと思う...しかし、私は考えに

+0

いいえ、そうではありませんので、観測のだが、理由はJSセマンティクスの:firstArrayとし、SecondArray同じ配列への「ポインティング」ですので、あなたは1に変更を加えたときに、それは他に反映されます。配列を割り当てるときにその配列のコピーを作成しなければなりません。最も高速なメソッドがたくさんあります: 'this.firstArray = _data.concat([])' – olivarra1

答えて

0

で述べたように、事前に

感謝をしたんolivarra1のコメントでは、両方の配列に_dataを割り当てています。これは、両方の配列が同じオブジェクト上で動作することを意味します。

1つの解決策は、連結を使用することです。

this.firstArray = _data.concat([]) 
関連する問題