Извлечение чисел из массива, смешанного со строками - Javascript - PullRequest
0 голосов
/ 05 сентября 2018

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

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

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

 const filtered = [23456, 34, 23455]

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

Ответы [ 4 ]

0 голосов
/ 05 сентября 2018

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

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

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

console.log(result);
0 голосов
/ 05 сентября 2018

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

См. MDN для map () , replace () , trim () и split ()

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

OR

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.log(filter);
0 голосов
/ 05 сентября 2018

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.log(reduced)
0 голосов
/ 05 сентября 2018

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.log(filtered)
...