JavaScript新数组出现引号包裹元素,如何移除引号?
咱们先把问题拆解清楚,你遇到的核心问题其实是变量赋值和数组创建的方式完全错误,导致所有数值被当成了单个字符串元素。
首先看你写的代码问题:
var xxc = 5868281.01, 5915961.10, 5748198.74, 5734639.29, 1144897.13;
这行代码在JS里是语法错误的——你不能用逗号分隔多个值给单个变量。实际运行时,这会把xxc赋值为第一个数值5868281.01,后面的数值会被当作未声明的独立变量直接报错。而你看到数组里是单个字符串,说明你可能实际是把这些数值写成了一个字符串(比如var xxc = "5868281.01, 5915961.10,..."),然后用new Array(xxc)创建数组,这自然只会生成一个包含该字符串的数组元素。
接下来给你两种实用的解决思路:
思路1:直接创建正确的数值数组(推荐)
如果这些数值是你已知的固定值,直接把它们放进数组字面量里就好,这是最直接且不易出错的方式:
// 直接生成包含所有数值的数组 var m = [5868281.01, 5915961.10, 5748198.74, 5734639.29, 1144897.13];
这样m就是一个纯数值数组,每个元素都是可以直接运算的数字,不会有字符串的问题。
思路2:如果xxc确实是逗号分隔的字符串(比如从外部获取的)
如果你是从某个地方拿到了这个逗号分隔的字符串(比如接口返回、用户输入),那可以通过以下步骤把它转成数值数组:
- 用
split(',')把字符串按逗号分割成字符串数组 - 用
trim()去掉每个字符串前后的空格(因为你的字符串里逗号后有空格) - 用
parseFloat()把每个字符串转成数值
代码示例:
var xxc = "5868281.01, 5915961.10, 5748198.74, 5734639.29, 1144897.13"; var m = xxc.split(',').map(str => parseFloat(str.trim()));
运行后m就是[5868281.01, 5915961.10, 5748198.74, 5734639.29, 1144897.13],完全符合你的需求。
为什么你之前的eval方法没用?
你尝试的m.map(s => eval('null,' + s))之所以失败,是因为s是整个长字符串,eval('null,' + s)会执行null, 5868281.01, 5915961.10,...,而JS里逗号运算符会返回最后一个值,所以最终只会得到1144897.13这个单个数值,而不是数组。而且eval存在安全风险(如果字符串里有恶意代码会被执行),强烈不推荐在这种场景下使用。
内容的提问来源于stack exchange,提问作者MsNichols

