Как сделать sh объект с нулевым индексом массива внутри массива в Angular - PullRequest
1 голос
/ 03 мая 2020

У меня есть бэкэнд API, который выдает данные в этом формате, когда он не пустой. Я должен всегда pu sh любые новые данные, поступающие от пользователя в 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 пустые, это дает Невозможно прочитать свойство 'pu sh' с неопределенной ошибкой .

  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. Может ли кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

1 голос
/ 03 мая 2020

Вы можете проверить, является ли он пустым, и сначала pu sh - пустой массив, если он:

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);
}

Вы также говорите, что хотите положить sh в 0th index of first array. Так что это решает часть «первого массива». Если вы действительно хотите поместить sh в индекс 0th первого массива, используйте unshift:

this.arr[0].unshift(dataObj);
0 голосов
/ 03 мая 2020

Есть удивительно много способов ввести элемент в 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);
0 голосов
/ 03 мая 2020

Вы можете использовать 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];

Это не не изменять существующий массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...