Не бери в голову, нашёл свой путь. Я использовал рекурсивную функцию, чтобы убедиться, что объект был создан правильно.
create = function(create_array, res, path){
var field = fields.shift();
if (field){
if (typeof res[field] == "undefined" || !res[field]) res[field] = (create_array?[]:{});
path.push('["' + field + '"]');
create(create_array, res[field], path);
}
}
var result = {}, strpath = [], fields[];
create(true, result, strpath);
eval('result' + strpath.join('') + ' = value;');
- переменная «field» - переменная вне функции, которая содержит уровни объекта.выполнение result["field"]["name"]["first"] = value
без поля ["field"]
или ["name"]
, существующего или определенного как объект, вызовет ошибку и остановит выполнение, поэтому я предварительно создаю переменную объекта в виде массива или объекта.*
Я не смог найти другой вариант для второго eval ().Нет способа обеспечить доступ к нескольким свойствам объекта, не зная глубины.