Ошибка “Cannot read property 'push' of undefined” при добавлении в массив

170
02 марта 2019, 18:30

Пишу небольшую программку для себя, в результате выполнения получаю ошибку

Cannot read property 'push' of undefined

при добавлении в массив. Из-за чего она появляется, и как её исправить?

console.log(flatList([ 
  [ 
    [2] 
  ], 
  [4, [5, 6, [6], 6, 6, 6], 7] 
])); 
 
function flatList(array) { 
  let res; 
  array.forEach(el => { 
    res = repeat(el); 
  }); 
  return res; 
} 
 
var tmp = tmp || []; 
 
function repeat(itms) { 
  if (typeof itms === 'number') { 
    tmp.push(itms); 
  } else { 
    itms.forEach(el => repeat(el)); 
  } 
}

Answer 1

Вот рабочая версия, хотя вторую проверку на число можно и убрать.

function flatList(arr){
    let res = [];
    arr.forEach(el => {
        repeat(el,res);
    });
    return res;
}
function repeat(itms,arr){
    if(typeof itms === 'number'){
        arr.push(itms);
    }else{
        itms.forEach(el => {
            if(typeof el === 'number')
                arr.push(el);
            else
                repeat(el,arr);
        });
    }
}
console.log(flatList([[[2]], [4, [5, 6, [6], 6, 6, 6], 7]]));
Answer 2

Проблема заключается в том, что вызов функции flatList происходит до того, как присвоилось значение в переменную tmp.

Поэтому внутри функции, эта переменная будет undefined, и будет возникать указанная ошибка.

Для решения, нужно присваивать значение tmp до вызова функции, в которой используется эта переменная:

var tmp = tmp || [];
...
console.log(flatList([
  [
    [2]
  ],
  [4, [5, 6, [6], 6, 6, 6], 7]
]));
Answer 3

Ошибки, про которую Вы пишите, - нет.

Функция repeat ничего не возвращает.

READ ALSO
JavaScript нейронные сети не хватает памяти

JavaScript нейронные сети не хватает памяти

Написал скрипт, используя библиотеки отсюда

186
Не работает fs.readFileSync

Не работает fs.readFileSync

Есть две разные ситуации с одним и тем же кодом

183
Крестики нолики на JavaScript

Крестики нолики на JavaScript

Есть такой код игры крестики нолики, но здесь каждый выбор клетки делаю я сам, а каким образом можно сделать, чтобы против меня компьютер играл?...

159