如何将一个对象数组中的值复制到typescript,angular 4中的另一个对象数组?

时间:2017-11-22 12:50:03

标签: javascript arrays angular typescript

我有一个需要一组对象的Angular组件!我编写了用于在服务中获取数组的代码:

    private roles_list = [];

    getRoles(): any[]  {
        return this.roles_list;
             }

    roles(){

    const promise = new Promise( (resolve, reject) => {
            return this._http.get('/api/getData')
                .subscribe(data => {
                    //this.roles_list = data
                    for (var i=0 ; i < Object.keys(data).length ; i++){
                        var temp = {};
                        temp["role"] = "role";
                        temp["value"] = data[i].key;
                        this.roles_list.push(temp);
                    }

                    console.log("data");
                    console.log(data);
                    console.log("roles_list");
                    console.log(this.roles_list);
                    resolve(this.roles_list);
                },
                err => {
                    reject(err);
                });
        });
    return promise;
}

然后我解决了组件中的承诺:

private roles = [];
this.getDataService.roles().then(res => {
      console.log(typeof(res));

       this.roles =  res.map(o => {
          return {name: o.name,role: o.role}
      });
  });

然而,这会引发各种错误,它说&#34;地图方法不适用于{}&#34;虽然res应该是一个数组而不是一个对象?任何帮助表示赞赏。

编辑:我通过resolve()发送JSON对象然后对组件的ngInit()进行处理解决了这个问题,有人知道为什么会出现这个问题吗?我们只能通过解决方式发送对象吗?

2 个答案:

答案 0 :(得分:0)

试试这个

private roles = [];
this.getDataService.roles().then(res => {
    console.log(typeof(res));

    for(let r of res){
        this.roles.push({name: r.name,role: r.role})
    }

});

答案 1 :(得分:0)

我弄清楚问题是什么,显然承诺只能通过它的解决方法传递单个对象。因此,当我通过它传递一个对象数组时,它认为它只是一个对象,显然,一个对象不能分配给一个对象数组。 这样做的方法是在服务中创建一个observable并在组件中订阅它。