2017-04-04 57 views
1

我已經創建了一個形式與角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); 
    });} 

填充在類中聲明2個陣列

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改性),並用第二個筆芯,但是當我刪除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是「指向」同一個數組,所以當你改變一個,它會反映在其他。你必須在分配它時創建該數組的副本......有很多方法,最快:'this.firstArray = _data.concat([])' – olivarra1

回答

0

正如提到的olivarra1發表評論,您正在爲這兩個陣列分配_data。這意味着兩個陣列都將在同一個對象上運行。

一個解決方案是使用concat。

this.firstArray = _data.concat([])