【问题标题】:Merge contents of a hash containing array of arrays in jQuery/JS for Highcharts在 jQuery/JS 中为 Highcharts 合并包含数组数组的哈希内容
【发布时间】:2014-07-24 19:00:19
【问题描述】:

我有两个哈希:

var hash1 = { name: "hello1", data: [ [1, 1], [2, 1] ] };
var hash2 = { name: "hello2", data: [ [3, 1], [4, 2] ] };
var hash3 = {};

我想要的是将散列组合成一个新的散列(hash3),以便仅合并数据对象/键的数组数组。理想情况下,结果应该根据数组的第一个元素(实际上是一个时间值)进行排序:

hash3 = { name: hello1, data: [ [1, 1], [2, 1], [3, 1], [4, 2] ] };

更喜欢 jQuery。但是 JavaScript 和/或 jQuery 都可以工作。

另外,如果有人能推荐一本关于在 JavaScript 中操作数据结构的好书,我将不胜感激。

PS:所有这些操作基本上都是为了将​​ Highcharts 图形库的两个系列合二为一。

【问题讨论】:

    标签: javascript jquery arrays hash highcharts


    【解决方案1】:

    我不知道任何关于您需要什么的好书,但简单的解决方案是创建合并系列的函数,请参阅:

    function mergeSeries(s1, s2) {
        var r = {};
        r.name = s1.name; // use first name
        r.data = s1.data.concat(s2.data); // merge arrays
        r.data.sort(function (a, b) {
            return a[0] - b[0];
        }); // sort data in series to be ascending by x-value
        return r;
    }
    

    那么使用就很简单了:

    var hash3 = mergeSeries(hash1, hash2);
    

    【讨论】:

      【解决方案2】:

      如果您不介意修改hash1,那么简单如下:

      > $.merge(hash1.data, hash2.data);
      > hash1
      Object {name: "hello1", data: Array[4]}
      

      如果你想保持 hash1 不变:

      > hash3 = {'name': hash1.name, 'data': $.merge($.merge([], hash1.data), hash2.data)};
      > hash3
      Object {name: "hello1", data: Array[4]}
      

      或者:

      > hash3 = $.extend({}, hash1);
      > $.merge(hash3.data, hash2.data);
      > hash3
      Object {name: "hello1", data: Array[4]}
      

      【讨论】:

        猜你喜欢
        • 2015-05-31
        • 2015-05-07
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        • 1970-01-01
        相关资源
        最近更新 更多