Angular 7 и массивы, объединяющие два массива в один массив, выдают ошибку undefined

#arrays #angular #typescript #angular7

#массивы #angular #typescript #angular7

Вопрос:

Мне нужно объединить 2 массива, прочитанные из файла Excel, в двумерный массив, чтобы я мог поместить его как dataSource из таблицы материалов.

У меня есть эти 2 массива, прочитанные из Excel с использованием XLSX библиотеки:

     reader.onload = (e) => {
      const res = reader.result as string; // This variable contains your file as text
      const lines = res.split('n'); // Splits you file into lines
      let ids=[];
      let name = [];
      let array:any[][];
      lines.forEach((line, index) => {
        //console.log(line);
        ids.push((line.split(',')[0]));
        name.push(line.split(',')[1]);
        array.push([ids, name])
      });
      console.log(array);
    }
  

Но я продолжаю получать ошибку на console.log(array) :

ОШИБКА TypeError: не удается прочитать свойство ‘push’ undefined

Редактировать:

Я изменил код на:

       let name = [];

      lines.forEach((line, index) => {
        //console.log(line);
        ids.push((line.split(',')[0]));
        name.push(line.split(',')[1]);
        array.push(ids, name)
      });
      console.log(array);
  

Результат был таким:

введите описание изображения здесь

Но это не то, что мне нужно, потому что это не будет работать как источник данных в таблице материалов.

Комментарии:

1. У вашего массива нет значения, братан. Об этом прямо говорится.

2. Я думаю, вам следует назначить пустой массив для вашего массива следующим образом : let array:any[]=[]

3. @stwilz пожалуйста, проверьте мою правку в конце вопроса

4. Просто ради правильных тегов — это чисто проблема с Javascript / Typescript. Не связано с angular или xlsx

5. @everyBit пожалуйста, проверьте мою правку в конце вопроса

Ответ №1:

Если я правильно понял вашу проблему … вот простой способ выполнить ваше требование.

  let lines = ["1,xx","2,yy","3,zz"];
 let name = [];
 let array = [];
      lines.forEach((line, index) => {
        //console.log(line);
        let obj = { 
        id : line.split(',')[0],
        name : line.split(',')[1]
        };
        
        //ids.push((line.split(',')[0]));
        //name.push(line.split(',')[1]);
        array.push(obj)
      });
      
console.log(array);