Создать массив чисел со строки JavaScript
Помогите пожалуйста создать массив чисел со строки. Я пробовал, но результат не порадовал:
var str = "[1.11, 0.0, 1.37, 1.8, 5.37, 0.16, 90.19]";
var array1 = Array.from(str.split(','),Number);
console.log(array1);
Ответы (4 шт):
Автор решения: Alexander Lonberg
→ Ссылка
var str = "[1.11, 0.0, 1.37, 1.8, 5.37, 0.16, 90.19]";
const array = str.replace(/^\[|\]$/g, '')
.split(/[, ]+/)
.map(Number.parseFloat)
console.log(array)
... или так:
var str = "[1.11, 0.0, 1.37, 1.8, 5.37, 0.16, 90.19]";
// Просто находим все числа
const array = str.match(/[\d\.]+/g).map(Number)
console.log(array)
Автор решения: yar85
→ Ссылка
Боги дали нам волшебный метод JSON.parse, пользуйся им:
var str = "[1.11, 0.0, 1.37, 1.8, 5.37, 0.16, 90.19]";
var array1 = JSON.parse(str);
console.log(array1);
Автор решения: DiD
→ Ссылка
var str = "[1.11, 0.0, 1.37, 1.8, 5.37, 0.16, 90.19]";
/* но если данные из нестабильного источника, лучше проверить: */
if(!/^\[\d+(.\d+)?(e-?\d+)?(,\s*\d+(.\d+)?(e-?\d+)?)*\]$/i.test(str)){
throw new SyntaxError('before eval: '+str);
}
var arr = eval(str);
console.log(arr);
Автор решения: Grundy
→ Ссылка
Альтернативным подходом может стать использование метода .match, который позволит собрать все числа в массив
Для этого можно определить регулярное выражение для чисел, например
/\d+(\.\d+)?/
В итоге можно получить следующий код:
var str = "[1.11, 0.0, 1.37, 1.8, 5.37, 0.16, 90.19]";
const array = str.match(/\d+(\.\d+)?/g)
.map(Number)
console.log(array)