JSFiddle - React, Tailwind, and code Playground

JavaScript

Array.prototype.getUnique = function(){
   var u = {}, a = [];
   for(var i = 0, l = this.length; i < l; ++i){
      if(u.hasOwnProperty(this[i])) {
         continue;
      }
      a.push(this[i]);
      u[this[i]] = 1;
   }
   return a;
}

Array.prototype.compare = function (array) {
    // if the other array is a falsy value, return
    if (!array)
        return false;

    // compare lengths - can save a lot of time
    if (this.length != array.length)
        return false;

    for (var i = 0, l=this.length; i < l; i++) {
        // Check if we have nested arrays
        if (this[i] instanceof Array && array[i] instanceof Array) {
            // recurse into the nested arrays
            if (!this[i].compare(array[i]))
                return false;
        }
        else if (this[i] != array[i]) {
            // Warning - two different object instances will never be equal: {x:20} != {x:20}
            return false;
        }
    }
    return true;
}

Array.prototype.max = function() {
  return Math.max.apply(null, this);
}

var arrays = [[1,2,3,4,5],
              [1,2,6,4,5],
              [1,3,6,4,5],
              [1,2,3,6,5],
              [1,7,5],
              [1,7,3,5]];

function process(prevs, i) {
    var vals = arrays.filter(function(d) { return prevs === null || d.slice(0, i).compare(prevs); })
                     .map(function(d) { return d[i]; }).getUnique();
    return vals.map(function(d) {
        var ret = { label: d }
        if(i < arrays.map(function(d) { return d.length; }).max() - 1) {
            tmp = process(prevs === null ? [d] : prevs.concat([d]), i+1);
            if(tmp.filter(function(d) { return d.label != undefined; }).length > 0) ret.children = tmp;
        }
        return ret;
    });
}

console.log(process(null, 0)[0]);