2017-05-08 118 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; 
}