JavaScript — Как удалить все буквы из массива массивов

#javascript #arrays #indexof #arrayofarrays

#javascript #массивы #indexof #arrayofarrays

Вопрос:

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

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

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

Комментарии:

1. Ожидаемый результат?

2. Будет ли удален первый массив (теперь пустой) или в результате останется пустой массив? Пожалуйста, укажите, каким будет ожидаемый результат для вашего примера data .

3. Никогда не используйте один и тот же индекс в циклах inner и outer

4. Ваши две проблемы, как я их вижу: вы используете i то, что, возможно, вы хотели использовать j в объявлении внутреннего цикла. Во-вторых, вы не можете сделать это indexOf с числом, поэтому ваши данные будут сброшены, как только они попадут в 2 .

5. Что, если данный массив является [["y","x",2],[2, 4],[5, 3],[6, 9]]

Ответ №1:

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

Вы можете использовать use 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. @Code Maniac Вы правы Вопрос OP не соответствует, потому что 1) его ожидаемый результат удаляет элементы 2) Он использует что-то вроде [p{IsLatin}s] , о котором он не рассказал

2. Да, вот почему это было дополнительное примечание, приятель 🙂 в любом случае, просто очищаю свои комментарии, поскольку OP уже предоставил дополнительные разъяснения по этому вопросу, поэтому они теперь неактуальны

Ответ №2:

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

  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);  

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

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

Комментарии:

1. Большое вам спасибо. Вы были очень полезны.

2. @jordirigau Спасибо, предоставлено с вашим обновлением, reduce() в этом нет необходимости. Я обновлял свой ответ, но увидел, что Махир был на шаг впереди — вместо этого рассмотрите его решение!

Ответ №3:

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