【问题标题】:java script how to convert a string to number arrayjavascript如何将字符串转换为数字数组
【发布时间】:2015-10-26 16:18:13
【问题描述】:

我有一个名为 :

的字符串
graph_data =[16.665,0,16.665,19.23,35.79,16.665,31.71,16.665,0,16.665,0,16.665,16.665,41.615]

我想将其转换为数字数组。我正在使用以下代码:

var graph_data1=new Array();
var graph_data = graph_data.split(",");
for (var i=0; i<graph_data.length; i++)
{
graph_data1[i] = parseFloat(graph_data[i]);
}

graph_data1 的输出显示在 NaN,0,16.665,19.23,35.79,16.665,31.71,16.665,0,16.665,0,16.665,16.665,41.615 之后

谁能告诉我为什么要添加Nan0

提前致谢。

【问题讨论】:

  • 如果你的字符串确实是一个字符串,分割后的第一个元素是[16.665,即NaN ...你的第二个元素是0,这就是你得到0的原因
  • 检查demo
  • 你的字符串是否真的包含graph_data=

标签: javascript arrays type-conversion nan


【解决方案1】:

您可以使用 JSON.parse 轻松做到这一点

var myArray = JSON.parse('[16.665, 0, 16.665, 19.23, 35.79, 16.665, 31.71, 16.665, 0, 16.665, 0, 16.665, 16.665, 41.615]')

如果您想一次性完成所有操作,请替换以删除 [

之前的内容
var myArray = JSON.parse('graph_data = [16.665, 0, 16.665, 19.23, 35.79, 16.665, 31.71, 16.665, 0, 16.665, 0, 16.665, 16.665, 41.615]'.replace(/.*\[/,'['))

【讨论】:

  • 如果字符串以graph_data = 开头,则不能。
  • 好点!子字符串或替换应该可以解决这个问题。稍作修改。
  • 该死的,比我快得多:
  • 对自己没有想到这一点感到有点恼火,我下面的子字符串答案现在看起来有点愚蠢:)
【解决方案2】:

问题是您的代码试图将“[”字符解析为数字使用子字符串来解决这个问题,如下所示:

var graph_data="[16.665,0,16.665,19.23,35.79,16.665,31.71,16.665,0,16.665,0,16.665,16.665,41.615]";
var graph_data1=[];
var graph_data = graph_data.substring(1, graph_data.length - 2).split(",");
for (var i=0; i<graph_data.length; i++)
{
graph_data1[i] = parseFloat(graph_data[i]);
}

【讨论】:

    【解决方案3】:

    当你使用时

    graph_data.split(',');
    

    它把第一个数字作为

    [16.665
    

    您需要从您的号码中删除 [ 你可以通过简单地做到这一点

    graph_data1[i] = parseFloat(graph_data[i].replace('[',''));
    

    虽然这不是一个好的做法,但它会为你完成这项工作。

    【讨论】:

      【解决方案4】:

      简单多了,只需要从数组头到尾解析json即可:

      var myString = "graph_data =[16.665,0,16.665,19.23,35.79,16.665,31.71,16.665,0,16.665,0,16.665,16.665,41.615]";
      var startInd = myString.indexOf('[');
      var endInd = myString.indexOf(']')+1; //+1 to include the ]
      var myIntArr = JSON.parse(myString.substring(startInd, endInd));
      console.log(myIntArr) // [16.665,0,16.665,19.23,35.79,...]
      

      【讨论】:

        【解决方案5】:

        你可以试试下面的代码:

        graph_data='[16.665,0,16.665,19.23,35.79,16.665,31.71,16.665,0,16.665,0,16.665,16.665,41.615]'
        var regexp = /(\+|-)?((\d+(\.\d+)?)|(\.\d+))/gi;
        var matches_array = graph_data.match(regexp);
        graph_data_array = matches_array.map(function (t) {
                return t;
            });
        console.log(graph_data_array)
        

        【讨论】:

          【解决方案6】:

          改用JSON.parse

          graph_data  ="[16.665,0,16.665,19.23,35.79,16.665,31.71,16.665,0,16.665,0,16.665,16.665,41.615]"
          
          graph_data = JSON.parse(graph_data)
          
          console.log(graph_data)
          => [16.665, 0, 16.665, 19.23, 35.79, 16.665, 31.71, 16.665, 0, 16.665, 0, 16.665, 16.665, 41.615]
          

          【讨论】:

            猜你喜欢
            • 2015-11-11
            • 2022-01-23
            • 1970-01-01
            • 2020-12-23
            • 1970-01-01
            • 1970-01-01
            • 2021-12-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多