Я пытаюсь создать объект вложенного дерева, используя существующий набор данных.
Исходный набор данных:
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]
];
Я хочу, чтобы мои окончательные данные выглядели так:
{'A1':
{'B1': {'C2': 2, 'C1': 1},
'B2': {'C2': 6, 'C1': 4}
},
'A2':
{'B1': {'C2': 10, 'C1': 8},
'B2': {'C2': 14, 'C1': 12}
}
}
Вот мой прогресс на данный момент.
var obj = {};
for(i = 0; i< raw_data.length; i++) {
var [x,y,z,value] = raw_data[i];
obj[x][y][z] = value;
}
Я перебираю данные и рекурсивно запускаю значения свойств для пустых данных.
Например: в 1-й итерации я установил obj['A1']['B1']['C1'] = 1
.
Однако это вызывает проблему, поскольку первая рекурсия (obj['A1'
]) вернет undefined
, поэтому следующая ошибка:
"TypeError: Cannot set property 'B1' of undefined
Чтобы решить эту проблему, вместо var obj = {}
я попытался использовать объект proxy
в ES6 следующим образом:
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;
}
}
});
Однако теперь возвращается следующая ошибка:
"TypeError: Невозможно установить свойство 'C1' из неопределенного
Что я здесь не так делаю?