如何解决尝试将对象数组中的数据存储到新对象中的错误

Posted

技术标签:

【中文标题】如何解决尝试将对象数组中的数据存储到新对象中的错误【英文标题】:How to solve errors in trying to store data from an array of objects in to new one 【发布时间】:2017-09-28 08:24:00 【问题描述】:

在此代码中,我尝试从 Web 服务中获取 tripIDNoteID 并将它们存储在行程中,然后通过读取 trips[i].noteID 缓存来自其他 Web 服务的其他参数,但会发生错误:

public trips= [ "Token" : "" ,
          "UDI" : "",
          "tripID" : "",
          "NoteID":"",
          "START_ADDRESS":"",
          "END_ADDRESS":"",
          "NAME":"",
          "PHONE":"",
          "COST":"",
         ];

GetTrips()
  let i = 0;
  let Url='http://mysitesite/gettrip/'+this.UDI+'/'+this.Token;
  console.log(Url);
  this.http.get(Url)
  .map(res => res.json())
            .subscribe(data =>             
          console.log(data);
          for(let note of data.notes) 
            this.trips[i].Token=this.Token;
            this.trips[i].UDI=this.UDI;
            this.trips[i].NoteID=note.ID;
            this.trips[i].tripID=note.TRIP;
            i++;
          
          console.log(this.trips);
          
    );

错误:

异常:无法设置未定义的属性“令牌”

异常:无法设置未定义的属性“UDI”

异常:无法设置未定义的属性“NoteID”

异常:无法设置未定义的属性“tripID”

更新 1: 这是@toskv 发布后的最新变化:

for(let note of data.notes) 
        let newTrip = 
            Token: this.Token,
            UDI: this.UDI,
            NoteID: note.ID,
            tripID: note.TRIP,
            START_ADDRESS :null,
            END_ADDRESS:null,
            NAME:null,
            PHONE:null,
            COST:null,
       ;
          this.trips.push(newTrip);
          
          console.log(this.trips);
          this.trips =this.trips.slice(1);
          console.log(this.trips.length);

           

【问题讨论】:

您应该真正了解一下数组在 js 中的工作原理。现在你在 for. 里面做 undefined.Token 【参考方案1】:

获取数组中不存在的索引的值将导致返回undefined值。

相反,您应该在数组中推送新值。

GetTrips() 

  let Url = 'http://mysitesite/gettrip/' + this.UDI + '/' + this.Token;
  console.log(Url);
  this.http.get(Url)
    .map(res => res.json())
    .subscribe(data => 
        console.log(data);

        for (let note of data.notes) 
          let newTrip = 
            Token: this.Token,
            UDI: this.UDI,
            NoteID: note.ID,
            tripID: note.TRIP
          ;
          this.trips.push(newTrip);

        
        console.log(this.trips);
      
    );

【讨论】:

嗨@toskv,首先非常感谢你,接下来经过测试,我强制添加:` COST:null,END_ADDRESS:null, NAME:null,PHONE:START_ADDRESS:null ` 到 newTrip。然后它为 0 索引添加一个空对象。 我无法想象这会是什么样子,您能用您更改的代码更新您的问题吗? 切片是怎么回事?同样在原始帖子中,当您定义trips 数组时,您使用其中的现有项目执行此操作。我猜这就是你要到达的那个。您是否尝试定义该数组中项目的类型? 嗨@toskv 你能检查一下吗:我已经解释了这个页面中的其他问题forum.ionicframework.com/t/…

以上是关于如何解决尝试将对象数组中的数据存储到新对象中的错误的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 vuex 存储数组中的对象?

如何从对象数组中获取特定数据并存储在js(vue js)中的新数组中

如何解决 laravel 数据表中的“尝试获取非对象的属性‘名称’”错误?

无法将存储数据访问到 vuex 中的组件中

我想用 Sequelize 将 MySQL 中的对象数组存储在单个列中

如何解决 Node.js 中的“请求过多”错误?