【问题标题】:Javascript: Split array of arrays into multiple arraysJavascript:将数组数组拆分为多个数组
【发布时间】:2015-06-05 07:38:39
【问题描述】:

这里有一个严重的问题,我有一个这样的数组:

[[0,50],[0,68],[1,26],[2,9],[2,32]]

我需要的形式是将这个数组分成两个分开的数组,如下所示:

array1 = [[0,50][1,0][2,9]]
array2 = [[0,68][1,26][2,32]]

是的,你们是对的人,我需要它来构建流动图。

如果有人对数据源感兴趣,这就是它在 firebase 中的样子:

{
  "1433203200000" : {
    "-JpgJnANTpQFprRieImv" : {
      "events" : 5,
      "name" : "Home office",
      "returningVisitors" : 9,
      "totalVisitors" : 50
    },
    "-JqsQjFTjHpzKqWgE_KJ" : {
      "events" : 10,
      "name" : "Samin Place",
      "returningVisitors" : 32,
      "totalVisitors" : 68
    }
  },
  "1433289600000" : {
    "-JqsQjFTjHpzKqWgE_KJ" : {
      "name" : "Samin Place",
      "newVisitors" : 1,
      "returningVisitors" : 25,
      "totalVisitors" : 26
    }
  },
  "1433376000000" : {
    "-JpgJnANTpQFprRieImv" : {
      "events" : 5,
      "name" : "Home office",
      "returningVisitors" : 9,
      "totalVisitors" : 9
    },
    "-JqsQjFTjHpzKqWgE_KJ" : {
      "events" : 10,
      "name" : "Samin Place",
      "returningVisitors" : 32,
      "totalVisitors" : 32
    }
  }
}

重点是循环每个时间戳和每个子节点,我们有 totalVisitors,这是我的图表所需的值。

奖金

如您所见,第一个时间戳有两个孩子很好,但第二个时间戳只有一个孩子 - “-JqsQjFTjHpzKqWgE_KJ”所以我需要将空值添加到新数组中(在我们的示例中它是 array1 第二个位置)。

这就是我所说的挑战 :)

非常感谢任何帮助,感谢关注。

编辑:

如果对某人有帮助的话,这是我需要的图表

here is link

X 轴 - 是时间戳
Y 轴 - 总访客值
行 - 每个唯一时间戳子项

【问题讨论】:

  • [1,0] 来自哪里?
  • 这就是挑战 :),您可以看到具有三个时间戳的 firebase 数据源,第一个和最后一个有两个孩子,但中间一个只有一个...所以我需要创建这个 [1,0]作为缺少的价值。不知道是否可能:)
  • 你最多有两个孩子吗?更准确地说,最大值是多少?
  • 它接缝你只需要: - 遍历数组 - 将第一个元素添加到第一个数组 - 将第二个元素添加到第二个数组 - 如果缺少元素添加“null”替换
  • 你有这么多数组(array1,array2),有多少个不同的-J...-like 键?我的意思是,在您的代码中,您有两个不同的键:"-JpgJnANTpQFprRieImv""-JqsQjFTjHpzKqWgE_KJ" 这就是为什么您有两个数组 - array1array2,我在写吗?

标签: javascript arrays charts firebase flot


【解决方案1】:

我为你创建了 jsfiddle。请问一下,是你需要的吗?

http://jsfiddle.net/1vdryy3L/1/

// first, we'll get all possible keys ('key' is e.g. "-JpgJnANTpQFprRieImv")
var keys = [];
for (var i in data) {
    for (var j in data[i]) {
        if (keys.indexOf(j) == -1) {
            keys.push(j);
        }        
    }
}

var result = {}, tmp, k;
for (i in keys) {
    tmp = []; k = 0;
    for (var j in data) {
        if (data[j][keys[i]]) {
            tmp.push([k, data[j][keys[i]].totalVisitors]);
        } else {
            tmp.push([k, 0]);
        }
        k++;
    }
    result['array' + i] = tmp;
}

console.log(JSON.stringify(result));

【讨论】:

    【解决方案2】:

    如果您使用的是 jQuery,这样的事情应该可以工作。如果您不是简单地将 jquery 语句替换为标准 js 语句。 (我准备了一个jsfiddle:jsfiddle

    var first = []
    var second = [];
    var my_data = {
      "1433203200000" : {
        "-JpgJnANTpQFprRieImv" : {
          "events" : 5,
          "name" : "Home office",
          "returningVisitors" : 9,
          "totalVisitors" : 50
        },
        "-JqsQjFTjHpzKqWgE_KJ" : {
          "events" : 10,
          "name" : "Samin Place",
          "returningVisitors" : 32,
          "totalVisitors" : 68
        }
      },
      "1433289600000" : {
        "-JqsQjFTjHpzKqWgE_KJ" : {
          "name" : "Samin Place",
          "newVisitors" : 1,
          "returningVisitors" : 25,
          "totalVisitors" : 26
        }
      },
      "1433376000000" : {
        "-JpgJnANTpQFprRieImv" : {
          "events" : 5,
          "name" : "Home office",
          "returningVisitors" : 9,
          "totalVisitors" : 9
        },
        "-JqsQjFTjHpzKqWgE_KJ" : {
          "events" : 10,
          "name" : "Samin Place",
          "returningVisitors" : 32,
          "totalVisitors" : 32
        }
      }
    } 
    var count = 0;
    $.each(my_data, function(key, value){
        if (value["-JpgJnANTpQFprRieImv"]){
            first.push([count, value["-JpgJnANTpQFprRieImv"]["totalVisitors"]])
        } else {
            first.push([count, 0])
        }
        if (value["-JqsQjFTjHpzKqWgE_KJ"]){
            second.push([count, value["-JqsQjFTjHpzKqWgE_KJ"]["totalVisitors"]])
        } else {
            second.push([count, 0])
        }
        count++;
    });
    

    【讨论】:

    • 哦,我忘了提到我正在使用 AngularJS,无论如何,这似乎可以帮助我在进行一些更改后使其工作,因为我需要循环所有“时间戳”孩子,而不仅仅是两个可以有可变数量的具有可变 id 的孩子。非常感谢您的建议。
    • 当我的声望提高一点时我会的:)
    猜你喜欢
    • 2016-11-16
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多