Пишу небольшую программку для себя, в результате выполнения получаю ошибку
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 ничего не возвращает.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости