在某个索引 typescript / angular 9 处推送或拼接对象数组?

Push or Splice onto array of objects at a certain index typescript / angular 9?

我在一个名为 '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'}

到目前为止,我已经尝试推动对象数组,但没有成功。我这样做的功能如下。我收到错误消息“ERROR TypeError: this.houseList[i].push is not a function.

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'}

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

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

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

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


您收到错误“错误类型错误:this.houseList[i].push 不是函数”的原因是 this.houseList[i] 解析为 {houseCode: '5678', street: 'Pike Street'} 这样的对象。此值不是数组,也没有 push 方法,因此 this.houseList[i].push 解析为 undefined.

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

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

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

Sample Solution on StackBlitz


参考资料

JavaScript Ellipsis: Three dots ( … ) in JavaScript