Пишу небольшую программку для себя, в результате выполнения получаю ошибку
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));
}
}
Вот рабочая версия, хотя вторую проверку на число можно и убрать.
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]]));
Проблема заключается в том, что вызов функции flatList
происходит до того, как присвоилось значение в переменную tmp
.
Поэтому внутри функции, эта переменная будет undefined
, и будет возникать указанная ошибка.
Для решения, нужно присваивать значение tmp
до вызова функции, в которой используется эта переменная:
var tmp = tmp || [];
...
console.log(flatList([
[
[2]
],
[4, [5, 6, [6], 6, 6, 6], 7]
]));
Ошибки, про которую Вы пишите, - нет.
Функция repeat
ничего не возвращает.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть такой код игры крестики нолики, но здесь каждый выбор клетки делаю я сам, а каким образом можно сделать, чтобы против меня компьютер играл?...