Как соединить массивы?
Object.values([ ...hours, ...first ].reduce((acc, n) => (acc[n.hour] = n, acc), {}))
для second - аналогично
let hours = [
    {"hour":0, "car":0, "bike": 0},
    {"hour":1, "car":0, "bike": 0},
    {"hour":2, "car":0, "bike": 0},
    {"hour":3, "car":0, "bike": 0},
    {"hour":4, "car":0, "bike": 0},
    {"hour":5, "car":0, "bike": 0},
    {"hour":6, "car":0, "bike": 0},
    {"hour":7, "car":0, "bike": 0}
];

let first = [
    {"hour":5, "car":10, "bike": 10},
    {"hour":8, "car":20, "bike": 0},
    {"hour":9, "car":30, "bike": 0},
    {"hour":10, "car":40, "bike": 0}
];

let second = [
    {"hour":0, "car":11, "bike": 12},
    {"hour":7, "car":15, "bike": 25},
    {"hour":8, "car":20, "bike": 30},
    {"hour":9, "car":10, "bike": 30},
    {"hour":10, "car":120, "bike": 140}
];

function mergeArraysOfObjects(source, recepient, uniqueKey) {
    var result = [];

    source.forEach(function(sourceElement) { 
        var foundRecepientElement = null;
        recepient.forEach(function(recepientElement) { 
            if (recepientElement[uniqueKey] === sourceElement[uniqueKey]) {
                foundRecepientElement = recepientElement;
            }
        });

        if (foundRecepientElement !== null) {
            result.push(foundRecepientElement);
        } else {
            result.push(sourceElement);
        }
    });

    recepient.forEach(function(recepientElement) { 
        var foundSourceElement = null;
        source.forEach(function(sourceElement) { 
            if (sourceElement[uniqueKey] === recepientElement[uniqueKey]) {
                foundSourceElement = sourceElement;
            }
        });

        if (foundSourceElement === null) {
            result.push(recepientElement);
        }
    });

    return result;
}

var firstMerge = mergeArraysOfObjects(hours, first, 'hour');
var secondMerge = mergeArraysOfObjects(firstMerge, second, 'hour');Пример