Нужно вывести массив с цифрами из каждой строки
Есть строка. Нужно выделить и отобразить цифры. Указанный код работает. Представим массив из 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)
Ответы (3 шт):
Можно так попробовать решить. Хотя, возможно, коллеги смогут предложить решения без двойного обхода
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));
Можно сделать вот так:
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), то тогда оно попадает в массив с результатами.
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));