69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
var мир = {};
|
|
|
|
мир.строкаПути = function(п) {
|
|
function вСтроку(ключ) {
|
|
return `["${ключ}"]`;
|
|
}
|
|
return "мир" + п.map(вСтроку).join("") + " = ";
|
|
};
|
|
|
|
мир.создатьПуть = function(путь) {
|
|
var уровень = мир;
|
|
var длина = путь.length;
|
|
for (var i = 0; i < длина; ++i)
|
|
{
|
|
var п = путь[i];
|
|
if (!уровень[п])
|
|
{
|
|
уровень[п] = {};
|
|
}
|
|
else
|
|
{
|
|
уровень = уровень[п];
|
|
}
|
|
}
|
|
};
|
|
|
|
мир.разобрать = function(словарь, путь = []) {
|
|
for (ключ in словарь)
|
|
{
|
|
var внутреннийПуть = путь.slice();
|
|
внутреннийПуть.push(ключ);
|
|
var значение = словарь[ключ];
|
|
мир.создатьПуть(внутреннийПуть);
|
|
if (typeof значение === "string")
|
|
{
|
|
// Функция.
|
|
if (значение.startsWith("function"))
|
|
{
|
|
var содержимое = мир.строкаПути(внутреннийПуть) + значение;
|
|
eval(содержимое);
|
|
}
|
|
// Строка.
|
|
else
|
|
{
|
|
var содержимое = мир.строкаПути(внутреннийПуть) + '"' + значение + '"';
|
|
eval(содержимое);
|
|
}
|
|
}
|
|
/*
|
|
// Массив.
|
|
else if (Array.isArray(значение))
|
|
{
|
|
console.debug("разобрать массив");
|
|
}
|
|
*/
|
|
// Словарь.
|
|
else if (значение === Object(значение))
|
|
{
|
|
мир.разобрать(значение, внутреннийПуть);
|
|
}
|
|
// Неизвестное.
|
|
else
|
|
{
|
|
console.error("неизвестная пара ключ/значение", ключ, значение);
|
|
}
|
|
}
|
|
};
|
|
|