I'm trying to create a nested tree object using an existing data-set. The original data-set is :
var raw_data = [
["A1", "B1", "C1", 1],
["A1", "B1", "C2", 2],
["A1", "B2", "C1", 3],
["A1", "B2", "C1", 4],
["A1", "B2", "C2", 5],
["A1", "B2", "C2", 6],
["A2", "B1", "C1", 7],
["A2", "B1", "C1", 8],
["A2", "B1", "C2", 9],
["A2", "B1", "C2", 10],
["A2", "B2", "C1", 11],
["A2", "B2", "C1", 12],
["A2", "B2", "C2", 13],
["A2", "B2", "C2", 14]
];
I want my final data to look like this :
{'A1': 
  {'B1': {'C2': 2, 'C1': 1}, 
   'B2': {'C2': 6, 'C1': 4}
  }, 
 'A2': 
  {'B1': {'C2': 10, 'C1': 8}, 
   'B2': {'C2': 14, 'C1': 12}
  }
}
Here's my progress so far.
var obj = {};
for(i = 0; i< raw_data.length; i++) { 
  var [x,y,z,value] = raw_data[i];
  obj[x][y][z] = value;  
}
I loop through the data and run the property values recursively on an empty data. 
For example: In 1st iteration I set obj['A1']['B1']['C1'] = 1.
However, this causes issue because the first recursion (obj['A1']) will return undefined so the following error : 
"TypeError: Cannot set property 'B1' of undefined
To resolve this, instead of var obj = {}, I tried to use proxy object in ES6 like this:
var obj = new Proxy({}, { 
    get: function(target, name) {
        if (!(name in target)) {
            console.log("Non-existant property '" + name + "'");
            var val = target[name] = typeof(target);  //Returning reference to already created object
            return val;  
        }
    }
}); 
However, now the following error is returned: "TypeError: Cannot set property 'C1' of undefined
What am I doing wrong here?
 
     
     
    