如何在Angular中将对象推入数组的第零索引中

时间:2020-05-03 07:14:00

标签: javascript arrays angular

我有一个后端API,当它不为空时,它将以这种格式提供数据。我必须始终将来自用户的任何新数据推入第一个数组的0th索引中。

[
  [
   {
      name: 'Name 1',
      type: 'Type 1'
    },
    {
      name: 'Name 2',
      type: 'Type 2'
    }
  ],
  [
    {
      name: 'Name 4',
      type: 'Type 4'
    },
    {
      name: 'Name 5',
      type: 'Type 5'
    }
  ]
]

以下代码适用于非空数据。但是,如果API数据为空,则会给出无法读取未定义错误的属性“ push”

  arr: any = [];

  constructor() {}

  submit(data){
    const dataObj = {
      name: 'Test name',
      type: 'Test type',
    }
    this.arr[0].push(dataObj)
    console.log('Result array - ', this.arr)
  }

我使用Stackblitz创建了working example。谁能帮忙吗?

3 个答案:

答案 0 :(得分:1)

您可以测试它是否为空,如果是空的,则首先推送一个空数组:

submit(data){
  const dataObj = {
    name: 'Test name',
    type: 'Test type',
  }

  if (!this.arr[0]) {
    this.arr.push([]);
  }

  this.arr[0].push(dataObj);
  console.log('Result array - ', this.arr);
}

您还说您想将其推送到0th index of first array。因此,这解决了“第一个数组”部分。如果您真的想将其推入第一个数组的0th索引,请使用unshift

this.arr[0].unshift(dataObj);

答案 1 :(得分:0)

您可以使用unshift。

const arr = [1, 2, 3];
arr.unshift(0); // [0, 1, 2, 3];

请注意,这是一个变异函数。

您还可以使用:

const arr = [1, 2, 3];
[0].concat(arr); // [0, 1, 2, 3];

这不会改变现有数组。

答案 2 :(得分:0)

令人惊讶的是,有多种方法可以在第0个位置输入元素。就像提到的其他答案一样,您可以使用push()shift()来实现。您也可以使用splice()方法。

const arr1 = [1, 2, 3];
arr1.splice(0, 0, 4); // <-- enter in pos. 0
console.log('Position 0: ', arr1);

const arr2 = [1, 2, 3];
arr2.splice(1, 0, 4); // <-- enter in pos. 1
console.log('Position 1:', arr2);