Способы интерполяции переменных шаблона внутри объектов JavaScript

я хотел бы сделать следующее

var obj = {
  animal: "${animal}"
};

var res = magic(obj, {animal: "cat"});

// res => {animal: "cat"}

magic - это функция, которая выполняет грязную работу. Очевидно obj может быть более сложным с несколькими ключами, вложенными массивами и так далее. Переменная шаблона может находиться внутри массива, подобного этому

var obj = {
  animals: ["cat", "dog", "${animal}", "cow"]
};

и он может быть где угодно в массиве так просто делать obj.animals[2] = "bat"; невозможно.

я нашел подчеркивание-библиотека tpl С которым я могу достичь того, чего хочу, но я бы хотелось бы знать, есть ли другие решения для дальнейшего использования и потому, что мне было трудно найти подчеркивание-tpl в первую очередь.

мое фактическое использование-это то, что у меня есть конфигурация.JSON-файл, где у меня есть несколько объявлений, таких как

{
  "task1": {
    "command": "command-line-program",
    "args": [
      "--input", "{{input}}",
      "--flag1",
      "--output", "{{output}}",
      "--flag2",
    ],
    "options": {
      "cwd": "path-to-working-dir"
    }
  }
}

я разбираю этот консиг.JSON с использованием JSON.parse(...) и я называю require("child_process").spawn С command, args и options параметры, объявленные в файле, однако args изменить много, флаги добавлены, переупорядочены и прочее, так что просто делать config.task1.args[1] = "<input value>"; включает в себя изменение кода, который вызывает spawn и это так же подвержено ошибкам, как и получается.

обновление

на основе принято отвечать я создал простой пакет (расположенном здесь), которые я могу включить в свои проекты, не стесняйтесь использовать его.

2 ответов


вы можете JSON.stringify объект, затем замените значение поиска фактическим значением, затем JSON.parse результат:

function magic(o, a) {
    var j = JSON.stringify(o);
    for (var k in a) {
            j = j.split('${'+k+'}').join(a[k]);
    }
    return JSON.parse(j);
}

Я предлагаю вам очень простой, но очень быстрый и понятно шаблонизатор : простой-шаблон.js

состоит из 22 строк кода, очень удобно! Учитывая это, вы сможете легко отобразить свою конфигурацию!