javascript - 从 javascript 中的对象数组替换模板中的键

标签 javascript regex

我有一个像这样的数组。

var arr = [
    {
        Id:1533248,
        Name:"HP",
        ParentId:33113319,
        ParentName:"Brand Name"
    },
    {
        Id:1533764,
        Name:"Samsung",
        ParentId:33113319,
        ParentName:"Brand Name"
    }    
]

还有一个模板。

var template = 'a_{ParentName}:{ParentId}_({Name}:{Id})*'

我正在尝试从模板生成字符串。我所拥有的只是对象数组。 () 内的部分也可以重复并用管道分隔。

这是所需的输出。

var result = 'a_brand-name:33113319_hp:1533248|samsung:1533764|sony:1533438';

数组中可能有许多具有相同 ParentId 的对象。我尝试使用正则表达式但失败了。我不擅长正则表达式。
请帮忙。

最佳答案

您可以使用 JS RegExp 和替换来交换模板中的变量。此外,您可以使用替换将字符串清理为所需的格式(根据我所看到的,用连字符替换空格并将字符串转换为小写)。听起来您的数据比上面显示的要多,因此您可能需要将多个模板(即每个父级一个)存储在一个对象中,其中键是parentId。使用该结构,您可以迭代该数组,从而非常快速地更新每个parentId 的模板。

var arr = [
    {
        Id:1533248,
        Name:"HP",
        ParentId:33113319,
        ParentName:"Brand Name"
    },
    {
        Id:1533764,
        Name:"Samsung",
        ParentId:33113319,
        ParentName:"Brand Name"
    }    
];


var template = 'a_{ParentName}:{ParentId}_({Name}:{Id})*';
arr.forEach(function(obj, i) {
  Object.keys(obj).forEach(function(key) {
    var newKey;
        if (typeof(obj[key]) === 'string') {
      newKey = obj[key].replace(/ /g, '-').toLowerCase();
    } else {
      newKey = obj[key];
    }

    var regex = new RegExp("{" + key + "}");
    template = template.replace(regex, newKey);
  });
  if (template.indexOf('({Name}:{Id})') === -1 && i < arr.length - 1) {
    template = template.replace(/\*/, '|({Name}:{Id})*');
  } else if(i === arr.length - 1) {
    template = template.replace(/[\*\(\)]/g, '');
  }
});

https://jsfiddle.net/mw3dwau7/2/

关于javascript - 从 javascript 中的对象数组替换模板中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34135702/

相关文章:

javascript - 警报未在 json 响应上触发

javascript - Facebook 事件中的 FB 像素自定义属性值_已删除_

javascript - 添加动态元素

Scala 中的正则表达式非捕获组

密码的正则表达式 = 一个数字和大小写字母和特殊字符但是!!开头或结尾没有特殊字符

html - 为什么这个用于验证危险 html 的 ASP.NET RegularExpressionValidator 不起作用?

javascript - 将 ,(逗号) 替换为 .(点) 并将 .(点) 替换为 ,(逗号)

javascript - 在 json 中存储函数 [Javascript/Coffeescript]

javascript - style.display = 'block' 在 div 上的 javascript 中不起作用

javascript - 为什么我的 Javascript 正则表达式的输出不一致?