SO - 17186645

by Arun P Johny

JavaScript

var obj = [
    { name : ["a", "x", "1"] , d : [1,2,3] },
    { name : ["a", "x", "2"] , d : [1,2,3] },
    { name : ["a", "y", "3"] , d : [1,2,3] },
    { name : ["a", "y", "4"] , d : [1,2,3] },
    { name : ["a", "z", "5"] , d : [1,2,3] },
    { name : ["a", "z", "6"] , d : [1,2,3] },
    { name : ["b", "x", "7"] , d : [1,2,3] },
    { name : ["b", "x", "9"] , d : [1,2,3] }
];

var formatted = {}, inner, i, j;

for(i = 0; i < obj.length; i++){
   expand(formatted, obj[i].name, obj[i].d)
}

function expand(obj, array, value){
    var key, temp;
    if(array.length == 1){
        obj[array.shift()] = value;
    } else {
        key = array.shift();
        temp = obj[key] = obj[key] || {};
        expand(temp, array, value)
    }
}

console.log(formatted)