【问题标题】:Push or Splice onto array of objects at a certain index typescript / angular 9?在某个索引打字稿/角度 9 处推送或拼接到对象数组上?
【发布时间】:2021-12-07 18:55:32
【问题描述】:

我在一个名为“houseList = []”的数组上有一个对象数组 - 数据如下所示:

  0: {houseCode: '1234', street: 'Grove Street'}
  1: {houseCode: '5678', street: 'Pike Street'}
  2: {houseCode: '9010', street: 'Park Street'}

我正在尝试遍历该数据并向对象添加特定索引 - 我想将以下属性添加到对象 #1,以便对象数组上的数据如下所示:

  0: {houseCode: '1234', street: 'Grove Street'}
  1: {houseCode: '5678', street: 'Pike Street', parking: 'True'}
  2: {houseCode: '9010', street: 'Park Street'}

到目前为止,我已经尝试推进对象数组,但没有成功。我这样做的功能如下。我收到“错误类型错误:this.houseList[i].push 不是函数。

for(let i = 0; i < this.houseList.length; i++) {
   if (i === 1) {
       this.houseList[i].push({parking: this.ParkingIsTrue})
}
}

我也尝试过拼接,但这只是在数组上创建了一个新对象。这是我的拼接功能代码:

for(let i = 0; i < this.houseList.length; i++) {
   if (i === 1) {
       this.houseList.splice(i, 0, this.ParkingIsTrue))
}
}

拼接的结果是:

  0: {houseCode: '1234', street: 'Grove Street'}
  1: {houseCode: '5678', street: 'Pike Street'}
  2: {'True'}
  3: {houseCode: '9010', street: 'Park Street'}

我的问题是,我该如何编写所需的数据添加?

【问题讨论】:

    标签: arrays angular typescript angular9


    【解决方案1】:

    您可以将parking 属性附加到对象,如下所示:

    this.houseList.splice(i, 0, {
      ...this.houseList[i],
      parking: this.ParkingIsTrue,
    });
    

    Sample Solution on StackBlitz


    参考文献

    JavaScript Ellipsis: Three dots ( … ) in JavaScript

    【讨论】:

      【解决方案2】:

      您想要做的不涉及编辑数组,只编辑该数组的属性。 Array.prototype.pushArray.prototype.splice 用于在数组中添加和删除元素,这不是您想在此处使用的。相反,您只想在数组的第一个索引处设置对象的属性,您可以这样做:

      this.houseList[1].parking = this.ParkingIsTrue;
      

      当然,您可能需要稍微调整一下,具体取决于您需要如何确定数组中的哪个元素需要编辑,以及它的值需要是什么。但我希望该示例至少是您需要使用的语法的有用指南。


      您收到错误“ERROR TypeError: this.houseList[i].push is not a function”的原因是 this.houseList[i] 解析为像 {houseCode: '5678', street: 'Pike Street'} 这样的对象。该值不是数组,也没有push 方法,所以this.houseList[i].push 解析为undefined

      当您尝试像调用函数一样调用它时,您会收到一个错误,抱怨它不是函数,因为,好吧,它不是函数。是undefined

      【讨论】:

        猜你喜欢
        • 2020-06-21
        • 2020-05-11
        • 2020-10-28
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-01
        相关资源
        最近更新 更多