2017-05-08 79 views
0

我掙扎,新的對象添加到JSON響應
我的樣本JSON響應如何將新的對象添加到angular2 JSON響應

{ 
    "products": [{ 
     "id": 1, 
     "name": "xyz" 
    }] 
} 

得到迴應後需要添加新對象(顯示)到相同的JSON響應

{ 
    "products": [{ 
     "id": 1, 
     "name": "xyz", 
     "show":false 
    }] 
} 

這是我的示例代碼

import {Component,OnInit} from '@angular/core'; 
    import {Http, Response} from '@angular/http'; 
    import 'rxjs/Rx'; 
    @Component({ 
     templateUrl:'./electronics.html' 
    }) 
    export class electronicsComponent{ 
     productListElectronics={}; 
     productListElectronicResponse: Object; 
     error:Object; 
     constructor(private http: Http) { 
      this.productListElectronicResponse={}; 
      this.error={}; 
      http.get('../json/electronics/electronics.json').map((res: Response) =>res.json()).subscribe(res => 
       { 

       for(var i = 0; i <= res['products'].length; i++){ 
        res['products'][i].show=false; 
        } 
        console.log(res); 
      }, error => this.error = error); 
     } 
    } 

但是控制檯不斷拋出下面的錯誤

ERROR TypeError: Cannot set property 'show' of undefined 
    at SafeSubscriber.http.get.map.subscribe._this.error [as _next] (products.component.ts:22) 
    at SafeSubscriber.__tryOrUnsub (Subscriber.ts:238) 
    at SafeSubscriber.next (Subscriber.ts:190) 
    at Subscriber._next (Subscriber.ts:135) 
    at Subscriber.next (Subscriber.ts:95) 
    at MapSubscriber._next (map.ts:80) 
    at MapSubscriber.Subscriber.next (Subscriber.ts:95) 
    at XMLHttpRequest.onLoad (xhr_backend.ts:104) 
    at ZoneDelegate.invokeTask (zone.js:398) 
    at Object.onInvokeTask (ng_zone.ts:253) 
    at ZoneDelegate.invokeTask (zone.js:397) 
    at Zone.runTask (zone.js:165) 
    at XMLHttpRequest.ZoneTask.invoke (zone.js:460) 
+1

將斷點在相關線上,等它到那裏,然後例如值,如'i'或'水庫[ '產品'] [I]'。 – 2017-05-08 08:09:40

回答

0

這應該用於遍歷你的對象的數組工作:

for(var key in res['products']){ 

    res['products'][key].show=false; 

} 

小提琴:https://jsfiddle.net/echonax/dm1d0vyw/

+1

使用'for ... in'來迭代數組通常是不被接受的。 – 2017-05-08 08:03:02

+0

@torazaburo如果鍵不是索引,你還要如何遍歷對象? – echonax

+0

使用數組,鍵(幾乎總是)索引。 – 2017-05-08 08:07:49

2

你的錯在這裏

for(var i = 0; i <= res['products'].length; i++) 

應該

for(var i = 0; i <res['products'].length; i++) 

:)

https://jsfiddle.net/rt6LjvLa/

+0

如果出現錯別字的原因會很好。哦,等一下,有。 – 2017-05-08 08:12:15

0

可能性1:

<=for循環else竟被它刪除= d再運行一次未定義的對象。

for(var i = 0; i < res['products'].length; i++){ 
    res['products'][i].show=false; 
} 

它上面的解決方案不工作,然後嘗試以下可能性2

我懷疑res['products']返回一個json array。下面的代碼行

運行,並在此附上你的結果:

console.log(res['products']) 
for(var i = 0; i <= res['products'].length; i++){ 
    console.log(res['products'][i]); 
    res['products'][i].show=false; 
}