Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将字符串{}值替换为obj(键值)_Javascript_Json_Node.js - Fatal编程技术网

Javascript 如何将字符串{}值替换为obj(键值)

Javascript 如何将字符串{}值替换为obj(键值),javascript,json,node.js,Javascript,Json,Node.js,我最近开始在nodeJs上编程 我有不同的字符串和Json对象 例如: 我如何自动化这个过程,所以使用string和obj我将把string{}值替换为obj(键值) 我试过帕格,但无法解析 pug.render(str, obj); 不适合我。让我看看,你想要做一些像模板一样的东西,就像把手一样 我将给您举一个例子,为您制作一个简单的车把: function render(template, properties) { var result = template; for

我最近开始在nodeJs上编程

我有不同的字符串和Json对象

例如:

我如何自动化这个过程,所以使用string和obj我将把string{}值替换为obj(键值)

我试过帕格,但无法解析

pug.render(str, obj);

不适合我。

让我看看,你想要做一些像模板一样的东西,就像把手一样

我将给您举一个例子,为您制作一个简单的车把:

function render(template, properties)
{
     var result = template;
     for (i in properties)
     {
         result = result.replace("{"+i+"}",properties[i]);
     }
     return result;
}
但此选项只会更改各个属性的第一次出现,如果需要,可以将其用于整个模板中的“全部替换”:

function render(template, properties)
{
     var result = template;
     for (i in properties)
     {
         var reg = new RegExp("{"+i+"}","g");
         result = result.replace(reg,properties[i]);
     }
     return result;
}

这是主题的一个变体

var str = 'My name is {name} and {name} my age is {age}.';
var obj = {name : 'xyz' , age: 24};

var render = function (str, obj) {
    return Object.keys(obj).reduce((p,c) => {
        return p.split("{" + c + "}").join(obj[c])
    }, str)
}

render(str, obj)

我认为您不应该重新发明轮子,因为最简单的解决方案是使用一些流行的节点模块

我建议使用“SprintfJS”

在这里查看我的示例代码

const sprintfJs = require('sprintf-js')

const template = 'hello %(name)s today is %(day)s'
const data = {
  name: 'xxxx',
  day: 'Tuesday'
}

const formattedString = sprintfJs.sprintf(template, data)
console.log(formattedString)

这可以通过单个替换调用实现

var obj = {name : 'xyz' , age: 24};
let c_obj = {};
let wordArr = [];

const res = str.matchAll("{.*?}");

for(const match of res){

    c_obj[match[0]] =  obj[match[0].slice(1,-1)];
    wordArr.push(match[0]);

}

let new_str = str.replace(new RegExp(wordArr.join('|'),'g'), match => c_obj[match]);


或者作为一行:
template.replace(/{(+?)}/g,(m,key)=>properties[key]| | m)
real nice,要把它收起来:-)
var obj = {name : 'xyz' , age: 24};
let c_obj = {};
let wordArr = [];

const res = str.matchAll("{.*?}");

for(const match of res){

    c_obj[match[0]] =  obj[match[0].slice(1,-1)];
    wordArr.push(match[0]);

}

let new_str = str.replace(new RegExp(wordArr.join('|'),'g'), match => c_obj[match]);