Преобразование элементов массива с помощью регулярки
Дан массив - [" 2.7 ", " 5 dollars ", "13.5", 17, "9.5"].
Он имеет строки и число.
Любой элемент, который содержит буквы нужно удалить.
Пробелы удалить(знаю что можно использовать trim()).
Остальные элементы привести к виду "$13.50" "$17.00" - число 17 тоже конвертировать в строку с долларом и нулями.
Возможно ли с помощью только одного регулярного выражения получить это: ["$2.70", "$13.50", "$17.00", "$9.50"].
Если нет, то какой способ самый короткий?
Ответы (2 шт):
Можно так:
const arr = [" 2.7 ", " 5 dollars ", "13.5", 17, "9.5"];
const arr2 = arr.flatMap(element => {
element = String(element).trim();
if (/[a-z]/i.test(element)) return [];
else return `\$${Number(element).toFixed(2)}`;
});
console.log(arr2);
Какой способ самый короткий?
let arr = [" 2.7 ", " 5 dollars ", "13.5", 17, "9.5"];
arr = arr.filter( e => !isNaN(e) ).map( e => "$" + (+e).toFixed(2) );
console.log(arr);
Предполагается, что в массиве никогда не будет пустых строк или null (или они преобразуются в "$0.00")
filter( fn ) берет функцию, вызывает её для каждого элемента массива. Возвращает новый массив, в который добавлены только те элементы, для которых вызванная функция вернула что-то, что в логическом контексте будет true.
isNaN( any ) берет аргумент и пробует преобразовать его в число. Если получается, возвращает false. !false будет true
map( fn ) - Так же вызывает переданную функцию для каждого элемента массива, и возвращает новый массив, где каждый элемент подменен на результат вызова этой функции. А toFixed(2) сам при необходимости добавит хвост .00