Удалить строки, сохранить числа в массиве с JavaScript

1

В других статьях говорится об удалении строк из массива на основе поискового запроса.

Но я пытаюсь определить, какие элементы являются строками, а какие - числами в массиве, а затем удалить все строки, чтобы вернуть новый массив.

function filter_list(l) {

  // Initiate new array

  let newArray = []; 

  // Loop through items in the array

  for (let i = 0; i < l.length; i ++) {

  // If the element is not in a string, add it to newArray

     if (i !== "^[a-zA-Z0-9_.-]*$") {
       newArray = newArray + i;
     }
  }
  return newArray;
}

Это возвращается 0123.

  1. Почему он не возвращает массив?
  2. Почему if (i !== "^[a-zA-Z0-9_.-]*$") не работает? Как еще я могу проверить, когда элемент является строкой (что-то в кавычках) в массиве?

https://www.codewars.com/kata/list-filtering/train/javascript

Спасибо

  • 1
    newArray = newArray + i; не так, как добавление новых элементов в существующий массив работает в JavaScript
  • 1
    Вы должны использовать push
Показать ещё 2 комментария
Теги:
arrays

2 ответа

1
Лучший ответ

Вы можете это ключевое слово typeof. и filter(). Я проверил код, пройдя все тесты в codewars.

Использование функции стрелки ES6

function filter_list(l) {
  return l.filter(x => typeof x === "number");
}
console.log(filter_list([1,2,'a','b']))

Без функции стрелки

function filter_list(l) {
  return l.filter(function(x){
      return typeof x === "number"
    });
}
console.log(filter_list([1,2,'a','b']))

Использование простых циклов

function filter_list(l) {
  let newArr = [];
  for(let i = 0;i<l.length;i++){
    if(typeof l[i] === "number") newArr.push(l[i]);
  }
  return newArr
}
console.log(filter_list([1,2,'a','b']))
  • 0
    Я еще не очень знаком с обозначениями стрелок. Можете ли вы объяснить, что => что там делает? Или переписать функцию в традиционном формате?
  • 0
    @ HappyHands31 В данном случае это просто ярлык для function(x) { return typeof x !== "string"; }
Показать ещё 4 комментария
1

Regex не является хорошим способом для анализа такой таблицы. Попробуй isNaN

console.log(
    [1,2,3,4,5, 'a', 'b', 1, 3].filter(item => !isNaN(item) ? item : '')
)

Если вы хотите менее хакерский способ, попробуйте

function filter_list(l) { 
// l is very bad name, because look similar to i

  let newArray = []; 

  for (let i = 0; i < l.length; i ++) {
      !isNaN(l[i]) ? newArray.push(l[i]) : ''
  }
  return newArray;
}

или даже

  for (let i = 0; i < l.length; i ++) {
      !isNaN(l[i]) ? newArray[i] = l[i] : ''
  }

Однако, эта задача может быть выполнена с помощью регулярных выражений, но я не могу рекомендовать это решение.


[1,2,3,4,5, 'a', 'b', 1, 3].join(' ').replace(/\D/gm, '').split('')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню