Нужно вывести массив с цифрами из каждой строки

Рейтинг: -3Ответов: 3Опубликовано: 11.04.2023

Есть строка. Нужно выделить и отобразить цифры. Указанный код работает. Представим массив из n строк. Нужно вывести массив с цифрами из каждой строки

let data = {
  volume: ''
}
let arr = 'goodby! 78 .'
let number = ''
for (const word of arr) {
  if ('0123456789'.includes(word)) {
    number += word
  }
}
data.volume = number
console.log(data)

Ответы

▲ 1

let arr1 = ['d,gm56', 'sdgf23dsg', 'ds14gsd'];
let arr2 = ['234d,gm56', 'sdgf23dsg', 'dsgsd', 'sdgg22'];

const test = arr => arr.join('').match(/\d+/g);

console.log(test(arr1));
console.log(test(arr2));

▲ 0

Можно так попробовать решить. Хотя, возможно, коллеги смогут предложить решения без двойного обхода

let test = ['d,gm56', 'sdgf23dsg', 'ds14gsd', 'testword', '12312sdfsdf99'];

let arr = []

function getNumbers(testArray) {
  testArray.forEach(function(elem) {
    let matches = elem.match(/\d+/g);
    if (matches) {
      matches.forEach(function(match) {
        arr.push(parseInt(match));
      });
    }
  });
  return arr;
}

console.log(getNumbers(test));

▲ 0

Можно сделать вот так:

const arr = ['d,gm56', 'sdgf23dsg', 'ds14gsd']

function onlyNumbers(data) {
  let resultArr = []

  for (let i = 0; i < data.length; i++) {
    const str = data[i]
    const number = str.replace(/\D/g, '')

    if(number) {
      resultArr.push(number)
    }
  }

  return resultArr
}

const result = onlyNumbers(arr)

console.log(result)

Объяснение

В строке которую вы получаем я убираю всё что не является числом с помощью метода replace. В методе написано регулярное выражение \D (оно означает НЕ число), оно равноценно такой записи: [^\d], а эта запись в свою очередь равноценна этой: [^0-9]. Я добавил флаг g в конце регулярного выражения чтобы оно применялось на всю строку, а не только на первый символ. Дальше идёт проверка number, проверяется являться ли она falsy, чуть подробнее можно прочитать тут или же тут, сейчас только упомяну, что если переменная number пустая (то-есть длина строки равна нулю), то тогда она считается falsy и проверку не проходит, соответственно не попадает в массив с результатами. Если же number валидно (то-есть является truthy), то тогда оно попадает в массив с результатами.