Я новичок в JavaScript и пытаюсь удалить массив массива, если есть буква
Пример: [["x", "y", 2], [2,4], [5, 3], [6, 9], ["a", 1]]
Ожидаемый результат будет: [[2, 4],[5, 3],[6, 9]];
[[2, 4],[5, 3],[6, 9]]
Ваш код не работает по двум причинам:
Вы используете i вместо j в объявлении внутреннего цикла
i
j
Вы пытаетесь набрать indexOf() на число
indexOf()
Ваш желаемый результат оставляет несколько незначительных неопределенностей, но вот решение, использующее Array.filter() и Array.every().
Array.filter()
Array.every()
var data = [["a","b",1,2],["y", "x"],[2, 4],[5, 3],[6, 9]]; var result = data.filter(group => group.every(item => !isNaN(item))); console.log(result);
РЕДАКТИРОВАТЬ: Обновлен код для устранения этого комментария:
если в первом массиве есть буква, она будет удалена
В вашем случае, я думаю, что проблема заключается во внутренней петле. Потому что data[i][j] будет "x","y",2,4,5..., и вы не можете применить indexOf() к числам, поэтому он выдает ошибку.
data[i][j]
"x","y",2,4,5...
Вы можете использовать Array.prototype.every() внутри Array.prototype.filter()
Array.prototype.every()
Array.prototype.filter()
var data = [["y","x",2],[2, 4],[5, 3],[6, 9]] let res = data.filter(x => x.every(x =>!isNaN(x))); console.log(res)
Чтобы достичь ожидаемого результата с помощью одного цикла, используйте filter и Math.max, если массив содержит строку, он возвращает NaN для Math.max
var data = [["x","y", 2],[2, 4],[5, 3],[6, 9],["a", 1]]; console.log(data.filter(v => !isNaN(Math.max.apply(Math, v))));
codepen- https://codepen.io/nagasai/pen/zbRbob?editors=1010