1

我是 javascript 新手,我无法弄清楚如何循环遍历一些代码,以便它基本上创建一个数组,然后我可以将其传递给我的 plot 变量。

我不确定从哪里开始。现在我有一段代码,它获取我的第一个数据集(dataOne)并对其进行格式化,以便它可以进入我的绘图变量。我基本上需要为其他数据集再做三遍 - 希望包括 example.getDataSets 函数以某种方式循环。

有没有好的方法来做到这一点?

这是我的代码:

脚本.js

var example = {};

example.data = {
    dataOne: {data: [{"date":1333238400000,"data":23},{"date":1333324800000,"data":37},{"date":1333411200000,"data":49},{"date":1333497600000,"data":54},{"date":1333584000000,"data":30},{"date":1333670400000,"data":19},{"date":1333756800000,"data":15},{"date":1333843200000,"data":19},{"date":1333929600000,"data":145}]},
    dataTwo: {data: [{"date":1335830400000,"data":63},{"date":1335916800000,"data":77},{"date":1336003200000,"data":66}]},
    dataThree: {data: [{"date":1341100800000,"data":24},{"date":1341187200000,"data":50},{"date":1341273600000,"data":43},{"date":1341360000000,"data":39},{"date":1341446400000,"data":56},{"date":1341532800000,"data":66}]},
    dataFour: {data: [{"date":1333238400000,"data":71},{"date":1333324800000,"data":46},{"date":1333411200000,"data":66},{"date":1333497600000,"data":73},{"date":1333584000000,"data":105},{"date":1333670400000,"data":84}]}
}

example.getDataSets = function(){
    return ['dataOne', 'dataTwo', 'dataThree', 'dataFour']
}

example.getSeries = function(month){
    return example.data[month]
}

example.processData = function(data){
    var newData = []
    for(var i = 0; i < data.length; i++){
        newData.push([data[i].date, data[i].data])
    };
    return newData;
}

我在 HTML 页面中的脚本:

$.getScript("script.js")
    .done(function() {

    var b = example.getSeries('dataOne');
    var d = example.processData(b.data);
    // first correct the timestamps - they are recorded as the daily
    // midnights in UTC+0100, but Flot always displays dates in UTC
    // so we have to add one hour to hit the midnights in the plot
    for (var i = 0; i < d.length; ++i)
      d[i][0] += 60 * 60 * 1000;

    var plot = $.plot($("#placeholder"), [d] , options);

任何建议都非常感谢!

4

3 回答 3

0

也循环从返回的.getDataSets

var sets = example.getDataSets(), set_i = 0, // get list of sets
    b = {}, d = [], i = 0, plot; // set-up vars
for(; set_i < sets.length; set_i++){ // loop over each set
    b = example.getSeries( sets[ set_i ] ); // get your set
    d = example.processData(b.data);
    for (i = 0; i < d.length; ++i)
      d[i][0] += 60 * 60 * 1000;

    plot = $.plot($("#placeholder"), [d] , options);
    // ... etc with plot
}

如果您希望在绘制之前将它们全部放在一个数组中,请在另一个数组上使用concat(调用它或其他东西),然后在 set 循环中 ,然后在循环外绘制d_totald_total = d_total.concat( d );

于 2012-09-20T02:12:43.837 回答
0

我假设你想处理每个

var b = example.getSeries(X);

其中 X 依次是“dataOne”、“dataTwo”、“dataThree”、“dataFour”?

如果是这样,你会寻找这样的东西:

// see below for where example.ordering is suggested
for (var i in example.ordered) {
  var month = example.ordered[i];
  var b = example.getSeries(month);
  var d = example.processData(b.data);
  ... further processing with month, b, d.
}

getDataSets() 可以按照您必须正确的顺序生成您的“月份”。我唯一担心的是你有两个地方的月份列表。您拥有的数组对于对月份进行排序是必需的,因为您无法从 example.data 中提取“月份名称”并期望它们的顺序相同(由于散列,密钥基本上是随机存储的)。

限定条件是您的密钥是否可排序,但您在此处拥有的密钥不是。当然,如果您从同一个源构建这对结构,那么将数据存储在关联数组(example.data 对象)以及一个单独的数组中以指示排序既常见又可以接受。理想情况下,您可以将这两个组合成另一个对象,以便将它们作为一个团队进行处理。

由于您的有序月份数组实际上在函数中“丢失”,我建议您添加类似

example.ordering = [ ..... ]

甚至更好的是,将月份按放入哈希中的相同顺序推到该列表的末尾。我将使用辅助函数来存储数据:

example.ordering = [];  // initially empty
example.storeSet = function (month, dataList) {
    example.ordering.push(month);
    example.data[month] = { data : dataList };
}

....
// now store the data
example.storeSet('dataOne',   [{"date":1333238400000,"data":23}, ....]);
example.storeSet('dataTwo',   [{"date":1335830400000,"data":63}, ....]);
example.storeSet('dataThree', [{"date":1341100800000,"data":24}, ....]);
example.storeSet('dataFour',  [{"date":1333238400000,"data":71}, ....]);

当然,我的代码未经测试(当然!),但它看起来是正确的,我相信您可以修复我可能犯的任何愚蠢错误。

于 2012-09-20T02:17:04.863 回答
-1

我是新来的,当你坐下来看了,仍然找不到答案时,我理解你的沮丧。但是,我认为您正在寻找的是这样的:

for (example.data=dataOne;example.data<dataFour;example.data=example.data+increment)
{
    code to be executed
}

甚至可能是递归的,但我不是最擅长的,但下面是一个标准示例

function recurs(p1) {
    p1--;
    if (p1 < 0) return // exit condition
        setTimeout("recurs("+p1+")",1);
}
于 2012-09-20T02:09:26.787 回答