Получить из массива только те элементы, которые являются строкой, используя цикл
Помогите найти ошибку:
function f10(elem) {
let out = '';
let a10 = [
[-2, '7', -3],
[3, 4, -7],
[-5, 6, -8, 32, 'a'],
['st', 21, -34, -43],
[44, -56, 'task']
];
for (let i = 0; i < elem.length; i++) {
for (let k = 0; k < elem[i].length; k++) {
if (typeof(elem) == 'string') {
out += elem[i][k] + ' ';
return out;
}
}
}
console.log(f10(a10));
document.querySelector('.out-10').innerHTML = out;
}
document.querySelector('.b-10').onclick = f10;
<button class="button-primary b-10">Task-10</button>
<div class="out-10">out-10</div>
Ответы (1 шт):
console.log(f10(a10));— чтобы выполнить эту строчку, функция должна вызвать саму себя, которая в свою очередь чтобы выполнить такую же строчку, захочет вызвать саму себя и так бесконечно.document.querySelector('.b-10').onclick = f10;иfunction f10(elem) {...Функцияf10требует аргумента, а он не указан, по умолчанию этим аргументом становитсяevent— объект событияclick. А в циклеevent.length→ undefined,i < undefined→ сразу false, цикл даже не начинается. /// →....onclick = function(){ f10(a10) }Непонимание областей видимости. Функция по задумке ожидает массив в качестве аргумента, а он создан внутри самой функции, а должен быть вне.
Формально в таких задачках функции / классы пронумерованы, но хорошо бы не смотря на это начать привыкать давать им "говорящие" названия, а не однобуквенные.
let matrix = [
[-2, '7', -3],
[3, 4, -7],
[-5, 6, -8, 32, 'a'],
['st', 21, -34, -43],
[44, -56, 'task']
];
document.querySelector('.b-10').addEventListener('click', function(){
document.querySelector('.out-10').innerHTML = getStrTypeElemsData(matrix);
});
function getStrTypeElemsData(matrix) {
let data = '';
for (let i = 0; i < matrix.length; i++) {
for (let k = 0; k < matrix[i].length; k++) {
if (typeof(matrix[i][k]) == 'string') {
data += `Значение: ${ matrix[i][k] }, Строчка: ${ i }, Индекс: ${ k }<br>`;
}
}
}
return data;
}
<button class="b-10">Task-10</button>
<div class="out-10">out-10</div>