уровни
This commit is contained in:
102
index.html
102
index.html
@@ -19,19 +19,96 @@
|
|||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
var мир = {};
|
var мир = {};
|
||||||
мир.разобрать = function(словарь) {
|
мир.путь = function(пп) {
|
||||||
for (ключ in словарь)
|
var уровень = мир;
|
||||||
|
var длина = пп.length;
|
||||||
|
for (var i = 0; i < длина; ++i)
|
||||||
{
|
{
|
||||||
var значение = словарь[ключ];
|
var п = пп[i];
|
||||||
console.debug("ключ/значение", ключ, значение);
|
if (уровень[п])
|
||||||
if (значение.startsWith("function"))
|
|
||||||
{
|
{
|
||||||
var содержимое = `мир["${ключ}"] = ` + значение;
|
уровень = уровень[п];
|
||||||
мир[ключ] = eval(содержимое);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
мир[ключ] = значение;
|
|
||||||
|
уровень[п] = {};
|
||||||
|
уровень = уровень[п];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return уровень;
|
||||||
|
};
|
||||||
|
мир.строкаПути = function(п) {
|
||||||
|
function вСтроку(ключ) {
|
||||||
|
return `["${ключ}"]`;
|
||||||
|
}
|
||||||
|
return "мир" + п.map(вСтроку).join("") + " = ";
|
||||||
|
};
|
||||||
|
мир.задатьЗначение = function(путь, значение) {
|
||||||
|
var уровень = мир;
|
||||||
|
var длина = путь.length;
|
||||||
|
for (var i = 0; i < длина; ++i)
|
||||||
|
{
|
||||||
|
var п = путь[i];
|
||||||
|
var конец = (i == длина - 1);
|
||||||
|
if (уровень[п])
|
||||||
|
{
|
||||||
|
if (конец)
|
||||||
|
{
|
||||||
|
уровень[п] = значение;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
уровень = уровень[п];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (конец)
|
||||||
|
{
|
||||||
|
уровень[п] = значение;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
уровень[п] = {};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
мир.разобрать = function(словарь, путь = []) {
|
||||||
|
for (ключ in словарь)
|
||||||
|
{
|
||||||
|
var внутреннийПуть = путь.slice();
|
||||||
|
внутреннийПуть.push(ключ);
|
||||||
|
var значение = словарь[ключ];
|
||||||
|
console.debug("ключ/путь/значение", ключ, внутреннийПуть, значение);
|
||||||
|
var уровень = мир.путь(внутреннийПуть);
|
||||||
|
if (typeof значение === "string")
|
||||||
|
{
|
||||||
|
// Функция.
|
||||||
|
if (значение.startsWith("function"))
|
||||||
|
{
|
||||||
|
var содержимое = мир.строкаПути(внутреннийПуть) + значение;
|
||||||
|
console.debug("содержимое", содержимое);
|
||||||
|
eval(содержимое);
|
||||||
|
}
|
||||||
|
// Строка.
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.debug("строка", значение);
|
||||||
|
уровень = значение;
|
||||||
|
//мир.задатьЗначение(внутреннийПуть, значение);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Вложенный объект/слоарь.
|
||||||
|
else if (значение === Object(значение))
|
||||||
|
{
|
||||||
|
мир.разобрать(значение, внутреннийПуть);
|
||||||
|
}
|
||||||
|
// Неизвестное.
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.error("неизвестная пара ключ/значение", ключ, значение);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -44,6 +121,13 @@
|
|||||||
мир.вывести("уга");
|
мир.вывести("уга");
|
||||||
console.debug("функция-пример исполнена. аргумент:", аргумент);
|
console.debug("функция-пример исполнена. аргумент:", аргумент);
|
||||||
}.toString();
|
}.toString();
|
||||||
|
json1.набор = {
|
||||||
|
проба: function() {
|
||||||
|
console.debug("это проба");
|
||||||
|
}.toString(),
|
||||||
|
простоСтрока: "уппамам",
|
||||||
|
};
|
||||||
|
|
||||||
json2 = JSON.stringify(json1);
|
json2 = JSON.stringify(json1);
|
||||||
console.debug("2", json2);
|
console.debug("2", json2);
|
||||||
|
|
||||||
@@ -57,6 +141,8 @@
|
|||||||
мир.пример(123);
|
мир.пример(123);
|
||||||
мир.вывести(77);
|
мир.вывести(77);
|
||||||
|
|
||||||
|
console.debug("мир", мир);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user