Как конвертировать массив строк для плавания в Javascript - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть этот массив, и он отформатирован как string :

['6.35', '2.72', '11.79', '183.25']

Проблема в том, что когда я конвертирую его в числа (используя - без двойных кавычек) array.match(/\d+/g).map(Number) || 0;

меняет точки, используемые для десятичных знаков, на запятые.Затем я получаю новый массив:

6,35,2,72,11,79,183,25

Итак, вместо 4 элементов в массиве, теперь у меня есть 8 элементов, поскольку мои разделители - запятые.

Любые идеикак я могу преобразовать этот массив без замены точек?

Ответы [ 7 ]

0 голосов
/ 05 февраля 2019

Разобрать значения для плавания:

console.log(['6.35', '2.72', '11.79', '183.25'].map(i => parseFloat(i)));

Если по какой-то причине .map() не работает, просто используйте цикл:

var array = ['6.35', '2.72', '11.79', '183.25']
var x = 0;
var len = array.length
while(x < len){ 
    array[x] = parseFloat(array[x]); 
    x++
}

console.log(array)
0 голосов
/ 05 февраля 2019

\d соответствует только цифрам, это сокращение от [0-9].Например, в 6.35 \d+ соответствует 6, а затем 35 отдельно, и точка игнорируется.В результате вы получите массив, содержащий эти совпадения.

Как указано в других ответах, использование совпадения в вашем случае является излишним, и вы можете использовать:

array.map(Number) 
0 голосов
/ 05 февраля 2019
var arr = ["6,35,2,72,11,79,183,25"]
var result=arr.map(Number);
result[]
typeof(result[])
0 голосов
/ 05 февраля 2019

var num = ['6.35', '2.72', '11.79', '183.25'].map(num => Number(num));

console.log(num);

Число () мдн

0 голосов
/ 05 февраля 2019

Отобразить массив с помощью функции Number, он будет обрабатывать преобразование:

console.log(['6.35', '2.72', '11.79', '183.25'].map(Number));

Если вы хотите запятую в своих числах, вы должны придерживаться строкового представления.

См. Этот SO ответ оаналогичная проблема с ChartJS.

0 голосов
/ 05 февраля 2019

Предполагая, что у вас есть массив в строковом формате, вы можете использовать следующее регулярное выражение для сопоставления всех десятичных знаков, а затем использовать .map(Number)

const str = "['6.35', '2.72', '11.79', '183.25']",
      array = str.match(/\d+(?:\.\d+)?/g).map(Number)

console.log(array)
0 голосов
/ 05 февраля 2019

Вы можете просто сопоставить номера.

var array = ['6.35', '2.72', '11.79', '183.25'],
    numbers = array.map(Number);

console.log(numbers);
...