【问题标题】:Javascript Splitting a table into multiple tablesJavascript将一个表拆分为多个表
【发布时间】:2014-10-24 13:40:53
【问题描述】:

我正在尝试创建一个由传入 JSON 表创建的动态表。

JSON 表遵循上述格式:

[timestamp, value1, value2, value3, value4]

值的个数不固定,一个查询可以返回4个值,下一个5、6、7... 表格进来表格数据

下面的代码尝试创建另一个表,如下所示:

s[1] = [Timestamp, value1]
s[2] = [Timestamp, value2]
s[3] = [Timestamp, value3]
....

这里是代码

var s = new Array();
for (var i = 0; i < data.length-1; i++) {
    var myrow = String(data[i]);
    var l = (myrow.match(/,/g) || []).length + 1
    var myarr = myrow.split(",");

    for (var j = 1; j < l; j++){
        if (isNaN(s[j])) {
            s[j] = new Array(2);
        }
        if (parseFloat(myarr[j]) != 0){
            s[j].push([parseInt(myarr[0]), parseFloat(myarr[j])]);
        }
}

但是当我执行这段代码时,我所有的 s[j] 都是 NaN。

这是我期望得到的示例:

//first iteration
data = ["1413370800000", "68.400580793576", "35.854875270197", "0"]
timestamp = 1413370800000
value1 = 68.400580793576
s[1] = [1413370800000, 68.400580793576]
timestamp = 1413370800000
value2 = 35.854875270197
s[2] = [1413370800000, 35.854875270197]
timestamp = 1413370800000
value3 = 0 
s[3] = [1413370800000, 0]

//second iteration
data = ["1413356400000", "125.99187714667", "19.503481981345", "138.13301276328"]
s[1] = [[1413370800000, 68.400580793576], [1413356400000, 125.99187714667]]
s[2] = [1413370800000, 35.854875270197], [1413356400000, 19.503481981345]]
s[3] = [1413370800000, 0],  [1413356400000, 138.13301276328]]

你能帮我吗?

谢谢

【问题讨论】:

    标签: javascript mysql json


    【解决方案1】:

    这个怎么样:

    data = ["1413370800000", "68.400580793576", "35.854875270197", "0"]
    
    ts = new Date(parseInt(data.shift())); // or whatever...
    
    data2 = data.map(function(x) {
      return [ts, parseFloat(x)]; 
    });
      
    document.write(JSON.stringify(data2));

    一般来说,Javascript iteration methods 比裸循环生成更简单、更易读的代码。

    【讨论】:

    • 谢谢georg,我的例子可能不够清楚。我已经用我期望得到的内容编辑了这个例子。但你说得对,我需要研究这种迭代方法......
    【解决方案2】:

    至于 georg 的回答,但使用 for 循环(并假设您希望将字符串转换为数字):

    data = ["1413370800000", "68.400580793576", "35.854875270197", "0"]
    
    for (var i=1, data2=[]; i<data.length; i++) {
      data2.push([+data[0], +data[i]]);
    }
    

    【讨论】:

    • 谢谢 RobG,我已经编辑了示例以更好地解释我期望得到的结果。
    猜你喜欢
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2011-05-05
    • 2020-05-27
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多