Извлечение чисел из массива, смешанного со строками - Javascript

У меня есть массив из строк и чисел. Мне нужно отсортировать числа или лучше извлечь только числа из другого массива. Вот пример:

 const myArr = ['Prihodi 23456 danaci 34 razhodi 23455 I drugi.']

Мне нужно сделать это так

 const filtered = [23456, 34, 23455]

Я использовал метод split (''), чтобы разделить их запятой, но не знаю, как отфильтровать их для JS, все они являются строками.

Вам нужны два результирующих массива, один со строками, другой с числами? в том, что? Какой код вы пробовали использовать до сих пор?

Calvin Nunes 05.09.2018 18:21

Сам факт того, что вы используете слово «фильтр», должен указать вам в правильном направлении, если вы решите исследовать его дальше самостоятельно.

Dexygen 05.09.2018 18:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
4 966
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

const myArr = ['Prihodi 23456 danaci 34 razhodi 23455 I drugi.'];
var result=[];
myArr.forEach(function(v){
  arr=v.match(/[-+]?[0-9]*\.?[0-9]+/g);
  result=result.concat(arr);
});
const filtered = result.map(function (x) { 
 return parseInt(x, 10); 
   });
console.info(filtered)

Это возвращает массив строковых представлений чисел, а не то, что запросил OP.

Chris Cousins 05.09.2018 18:36

изменил его на числа

Amstel D'Almeida 05.09.2018 18:38
Ответ принят как подходящий

Это могло быть возможным решением,

См. MDN для карта(), заменять(), отделка() и расколоть()

const myArr = ['Prihodi 23456 danaci 34 razhodi 23455 I drugi.'];
filtered = myArr[0].replace(/\D+/g, ' ').trim().split(' ').map(e => parseInt(e));
console.info(filtered);

ИЛИ

const regex = /\d+/gm;
const str = `Prihodi 23456 danaci 34 razhodi 23455 I drugi`;
let m;
const filter = [];
while ((m = regex.exec(str)) !== null) {
  // This is necessary to avoid infinite loops with zero-width matches
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }

  // The result can be accessed through the `m`-variable.
  m.forEach((match, groupIndex) => {
    filter.push(parseInt(match))
  });
}

console.info(filter);

const myArr = ['Prihodi 23456 danaci 34 razhodi 23455 I drugi.']
const reduced = myArr[0].split(' ').reduce((arr, item) => {
  const parsed = Number.parseInt(item)
  if (!Number.isNaN(parsed)) arr.push(parsed)
  return arr
}, [])
console.info(reduced)

Вы можете сделать это с помощью простых Regex и Array.prototype.map:

const myArr = ['Prihodi 23456 danaci 34 razhodi 23455 I drugi.']

const result = myArr[0].match(/\d+/gi).map(Number);

console.info(result);

Я давно закончил задачу. Однако теперь я нашел это быстрое решение

const arr = ['Prihodi 23456 danaci 34 razhodi 23455 I drugi.']

const res = arr.join('')
.split(' ')
.filter(e => +e)
.map(num => +num);

console.info(res);

const array = ["строка1", -35, "строка2", 888, "blablabla", 987, NaN];

const mapArray = array.filter((item) => {
  if (item < 0 || item >= 0) return item;
});

console.info(mapArray);

Обратите внимание, что это не сработает, если исходный массив включал отрицательные числа.

Andy 26.02.2021 16:11

Другие вопросы по теме