JavaScript - Как удалить все буквы из массива массивов - PullRequest
1 голос
/ 14 марта 2019

Я новичок в JavaScript и пытаюсь удалить массив массива, если есть буква

Пример: [["x", "y", 2], [2,4], [5, 3], [6, 9], ["a", 1]]

Ожидаемый результат будет: [[2, 4],[5, 3],[6, 9]];

Ответы [ 3 ]

2 голосов
/ 14 марта 2019

Ваш код не работает по двум причинам:

  1. Вы используете i вместо j в объявлении внутреннего цикла

  2. Вы пытаетесь набрать indexOf() на число

Ваш желаемый результат оставляет несколько незначительных неопределенностей, но вот решение, использующее 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);

РЕДАКТИРОВАТЬ: Обновлен код для устранения этого комментария:

если в первом массиве есть буква, она будет удалена

2 голосов
/ 14 марта 2019

В вашем случае, я думаю, что проблема заключается во внутренней петле. Потому что data[i][j] будет "x","y",2,4,5..., и вы не можете применить indexOf() к числам, поэтому он выдает ошибку.

Вы можете использовать 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)
1 голос
/ 14 марта 2019

Чтобы достичь ожидаемого результата с помощью одного цикла, используйте 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

...