javascript - 将两个日期系列合并为一个

标签 javascript arrays html graph dygraphs

我需要在 Dygraph.js 中制作一些具有多个系列的图表。

例如我有这个数据集:

array1 = [ ['2016-03-16', 10,]
           ['2016-03-17', 20,]
           ['2016-03-19', 20,]
           ['2016-03-20', 15,]
         ];

array2 = [ ['2016-03-16', 30,]
           ['2016-03-18', 50,]
           ['2016-03-20', 30,]
         ];

我想将这些数组合并为一个:

merged = [ ['2016-03-16', 10, 30]
           ['2016-03-17', 20, null]
           ['2016-03-18', null, 50]
           ['2016-03-19', 20, null]
           ['2016-03-20', 15, 30,]
         ];

Ofcorse 日期的格式更为复杂:YYYY-MM-DD HH:mm:ss。 我使用 moment.js 进行日期操作。

如何以最快的方式合并这些数组?

最佳答案

适用于任意系列数量的解决方案。

var array1 = [['2016-03-16', 10], ['2016-03-17', 20], ['2016-03-19', 20], ['2016-03-20', 15]],
    array2 = [['2016-03-16', 30], ['2016-03-18', 50], ['2016-03-20', 30]],
    merged = function (array) {
        var o = {}, r = [];
        array.forEach(function (a, i) {
            a.forEach(function (b) {
                if (!o[b[0]]) {
                    o[b[0]] = Array.apply(null, { length: array.length + 1}).map(function () { return null; });
                    o[b[0]][0] = b[0];
                    r.push(o[b[0]]);
                }
                o[b[0]][i + 1] = b[1];
            });
        });
        return r.sort(function (a, b) { return a[0].localeCompare(b[0]); });
    }([array1, array2]);

document.write('<pre>' + JSON.stringify(merged, 0, 4) + '</pre>');

关于javascript - 将两个日期系列合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36034249/

相关文章:

html - 在正常和悬停状态下在列表项中垂直添加图标不起作用

javascript - iOS 和 Android 浏览器中的多声道音频支持

javascript - 如何在 javascript 中的内置 JavaScript 类的子类中使用基类方法

javascript - 使用 jQuery 流畅地制作动画

java - 我无法访问 TreeMap 中的 int[]

javascript - 我如何用每个字符串之间的逗号分割一个数组?

Javascript 显示隐藏两个单选按钮的公共(public) Div

javascript - jquery.each - 将计数器传递给子 .onload 函数

c - 字符串到单个数字

HTML 禁用按钮获取 :active CSS Pseudo Class