javascript - Lägg till ny objekt-egenskap i JSON-svar i Angular


Jag försöker lägga till en ny objekt-egenskap i mitt JSON-svar.

Mitt exempel på JSON-svar

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

Efter att ha fått svaret behöver du lägga till en ny objekt-egenskap (show) till samma JSON-svar

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

Detta är min exempel kod

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

Men konsolen fortsätter att visa följande fel:

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)

Svar #1

Ditt misstag är här

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

Det borde vara

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

:)

https://jsfiddle.net/rt6LjvLa/

Svar #2

Detta bör fungera för att traversera din array av objekt:

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

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

}

Fiddle: https://jsfiddle.net/echonax/dm1d0vyw/