【问题标题】:Undefined after splitting array of strings (JavaScript)拆分字符串数组后未定义(JavaScript)
【发布时间】:2015-06-01 02:00:24
【问题描述】:

我希望将字符串数组 (objData) 拆分为单独的元素,并将它们复制到二维数组 (sequence) 的第一行。请看下面的代码。

for(i = 0; i < objData.length; i++)
{
    console.log("objData[i]: " + objData[i]);
    parts = objData[i].split(' ');
    sequence[0][n] = parts[1];
    console.log("sequence[0][n]: " + sequence[0][n]);
    sequence[0][n+1] = parts[2];
    sequence[0][n+2] = parts[3];
    n+=3;
    parts = [];
}

注意n被初始化为0。objData的每个元素都是一个字符串,格式如下:

objData[0] = "v 2.11733 0.0204144 1.0852"

我希望通过使用空格作为分隔符来拆分这些字符串(从objData 的每个元素)并将十进制值复制到sequence 的第一行。我也想把这些字符串值解析成浮点数。

使用上面的代码正在复制值,但是 sequence 第一行的内容如下所示:

[2.11733NaN, 0.0204144NaN, 1.0852NaN, 2.12303undefined, 0.0131256undefined ..... etc.]

其余元素都附加了“未定义”,如图所示。

我尝试使用以下行解析为浮点数:

parts = objData[i].split(' ').map(parseFloat);

但是sequence 的内容当时是:

    [2.11733, 0.0204144, 1.0852, NaN, NaN ..... etc.]

如果有人能告诉我如何拆分和解析这些数据,将不胜感激!谢谢。

【问题讨论】:

    标签: javascript parsing split nan parsefloat


    【解决方案1】:

    在我看来,您正在为此做大量工作。

    让我们一步一步来:

    // Make sure sequence array is empty
    sequence = [];
    
    // We want to process each element of the objData array :
    objData.forEach (function (obj_n) {
      // First split the element, one or more spaces separate fields
      obj_n = obj_n.split (/ +/); // obj_n is now an array
      // Extract elements 1 to 3
      obj_n = obj_n.slice (1, 4); // obj_n is now the three data values
      // Append the three elements to the sequence array:
      sequence = sequence.concat (obj_n);
    });
    
    // Now convert to numbers:
    sequence = sequence.map (function (f) { return +f });
    

    更紧凑:

    sequence = [];
    objData.forEach (function (obj_n) {
      sequence = sequence.concat (obj_n.split (/ +/).slice (1, 4));
    });
    sequence = sequence.map (function (f) { return +f });
    

    回答 o.p. 中的附加约束。下面是cmets

    function parseObjData (objData, m, n) { // Add n items to sequence m
      if (!sequence[m]) // make sure sequence[m] exists
        sequence[m] = [];
    
      objData.forEach (function (obj_n) {
        sequence[m] = sequence[m].concat (obj_n.split (/ +/).
                                  slice (1, n + 1));
      });
      sequence[m] = sequence[m].map (function (f) { return +f });
    }
    

    【讨论】:

    • 感谢您提供简洁的代码和解释。这是一个函数的一部分,它接受objData 作为参数和一个整数m 来增加sequence 的行。这段代码是否也可以应用到该代码上,以便通过objData 解析它并将其分配给sequence 的每一行来做同样的事情?例如,我怎样才能达到这样的效果:sequence[m][] = sequence[m][].concat (obj_n.split (/ +/).slice (1, 4));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多