You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.1KB

  1. var мир = {};
  2. мир.строкаПути = function(п) {
  3. function вСтроку(ключ) {
  4. return `["${ключ}"]`;
  5. }
  6. return "мир" + п.map(вСтроку).join("") + " = ";
  7. };
  8. мир.создатьПуть = function(путь) {
  9. var уровень = мир;
  10. var длина = путь.length;
  11. for (var i = 0; i < длина; ++i)
  12. {
  13. var п = путь[i];
  14. if (!уровень[п])
  15. {
  16. уровень[п] = {};
  17. }
  18. else
  19. {
  20. уровень = уровень[п];
  21. }
  22. }
  23. };
  24. мир.разобрать = function(словарь, путь = []) {
  25. for (ключ in словарь)
  26. {
  27. var внутреннийПуть = путь.slice();
  28. внутреннийПуть.push(ключ);
  29. var значение = словарь[ключ];
  30. мир.создатьПуть(внутреннийПуть);
  31. if (typeof значение === "string")
  32. {
  33. // Функция.
  34. if (значение.startsWith("function"))
  35. {
  36. var содержимое = мир.строкаПути(внутреннийПуть) + значение;
  37. eval(содержимое);
  38. }
  39. // Строка.
  40. else
  41. {
  42. var содержимое = мир.строкаПути(внутреннийПуть) + '"' + значение + '"';
  43. eval(содержимое);
  44. }
  45. }
  46. /*
  47. // Массив.
  48. else if (Array.isArray(значение))
  49. {
  50. console.debug("разобрать массив");
  51. }
  52. */
  53. // Словарь.
  54. else if (значение === Object(значение))
  55. {
  56. мир.разобрать(значение, внутреннийПуть);
  57. }
  58. // Неизвестное.
  59. else
  60. {
  61. console.error("неизвестная пара ключ/значение", ключ, значение);
  62. }
  63. }
  64. };