Замените целевую переменную исходной переменной - PullRequest
0 голосов
/ 21 октября 2019

У меня есть некоторый случайный текст, например:

var target = "{!periodnr} Period";
/* or */ target = "{!setnr} Set";
/* or */ target = "Over {!total} Point";

var source = "test=123|periodnr=2";
/* or */ source = "setnr=3|test=123";
/* or */ source = "total=30|test=123";

Мне нужно заменить переменную target на переменную source. И я хочу получить такой результат:

var replacedOutput = "2  Period";
/* or */ replacedOutput = "3  Set";
/* or */ replacedOutput = "Over 30 Point";

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 21 октября 2019

Попробуйте этот подход, он разделяет источник и сопоставляет ключи с целью

var target1 = "{!periodnr} Period";
var target2 = "{!setnr} Set";
var target3 = "Over {!total} Point";

var source1 = "test=123|periodnr=2";
var source2 = "setnr=3|test=123";
var source3 = "total=30|test=123";

function render(dst, src) {              // src="test=123|periodnr=2"
  const parts = src.split('|')           // ["test=123", "periodnr=2"]
  const vars = parts
    .filter(v => v.length)
    .map(v => {
      const props = v.split('=')         // ["test", "123"]
      const key = props[0]
      return ({
        [key]: props[1]                  // {test: "123"}
      })
    })

  vars.forEach(v => {
    const keys = Object.keys(v)          // ["test"]
    const pattern = '{!' + keys[0] + '}' // "{!test}"
    const value = v[keys[0]]             // 123
    dst = dst.replace(pattern, value)
  })

  return dst
}

console.log(render(target1, source1))
console.log(render(target2, source2))
console.log(render(target3, source3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...