如何在Javascript中将字符串数组转换为浮点数数组

6
我有一个数组,格式为字符串:
['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个元素。

你有什么想法可以在不替换点的情况下转换这个数组吗?


逗号是Chart Js中使用的分隔符。因此,我必须保留它们,而不替换点。 - Julio S.
1
好的,下面的答案与这里的答案相同,你只需要提高搜索答案的能力,而不是问重复的问题。 - Alexandre Elshobokshy
一个浮点数就是一个浮点数,小数点与此无关。当你使用Number将字符串转换为数字时,你会得到浮点数。如果Chart JS不接受浮点数,那么这是另一个问题,你应该重新表述你的问题,以便我们更好地帮助你。 - jo_va
以下答案确实会返回点,但如果它们使用逗号作为分隔符,则它们使用的是字符串而不是实际数字。以下任何答案都没有起作用吗?如果没有,那么你的问题并不是你需要问的问题,你应该搜索实际问题。 - Alexandre Elshobokshy
请查看此链接:https://dev59.com/i18e5IYBdhLWcg3wTI-L#26567557 - jo_va
显示剩余3条评论
8个回答

10
假设您有一个以字符串格式表示的数组,您可以使用以下正则表达式匹配所有小数,然后使用.map(Number)

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

console.log(array)


负数怎么办? - sonictl
@sonictl 在正则表达式的开头添加一个可选的减号 -?/-?\d+(?:\.\d+)?/ - adiga
非常感谢!我建议将答案修改为注释,类似于正则表达式,以便允许所有实数。因为这个问题中的“float”应该包含所有实数。 - sonictl

5

\d只匹配数字,它是[0-9]的简写。例如,在6.35中,\d+分别匹配635,并忽略了小数点。最终结果是一个包含这些匹配项的数组。

如其他回答所建议的,您在这种情况下可以省略使用match,并使用以下代码:

array.map(Number) 

4
您可以只映射数字。

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

console.log(numbers);


如果我只使用这种方法,那么Chart Js(其中使用了数组)将无法呈现图表。此外,由于某种原因,这种方法本身会失败,因此我甚至无法打印结果。 - Julio S.
在JavaScript中,我们不需要将数字内容转换为数字文字,因为这就是我们喜欢JavaScript的原因 - 它是活的!如果我们服务好它,它会为我们完成。 - Bekim Bacaj
@JulioSouto,问题是,为什么chartjs不接受这个数组?你试过只用数字的数组吗? - Nina Scholz
@NinaScholz 我已经成功地使用整数完成了它。问题仅与浮点数有关。 - Julio S.

2

使用Number函数对数组进行映射,它将处理转换:

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

如果您想在数字中使用逗号,则必须使用字符串表示法。
查看此SO答案,了解有关ChartJS类似问题的信息。

如上所述,如果我仅使用这种方法,那么Chart Js(使用该数组的地方)将无法渲染图表。此外,由于某种原因,这个方法本身失败了,因此我甚至无法打印结果。 - Julio S.

1

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

console.log(num);

Number() mdn


大家好,这里出现了一个错误:TypeError: window.column_b.map is not a function. (In 'window.column_b.map(i => Number(i))', 'window.column_b.map' is undefined)。PS:因为它是在函数外声明的全局变量,所以使用了 "window.column_b"。 - Julio S.

1
将值解析为浮点数:

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)


感谢Islam花费时间尝试解决问题。我已经测试了Adiga提出的解决方案,它有效了,所以我已经标记为已解决。 - Julio S.
@JulioSouto 我很高兴! - Alexandre Elshobokshy

0

我遇到了同样的问题,这是我找到的解决方案 我有

x = "11,1.1,100,100,2,3333,99"

我想要

x = [11,1.1,100,100,2,3333,99]

这是我的解决方案

x.toString().replace(/, +/g, ",").split(",").map(Number)

0
var arr = ["6,35,2,72,11,79,183,25"]
var result=arr.map(Number);
result[]
typeof(result[])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接