繁体   English   中英

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

[英]Replace keys in a template from array of objects in javascript

我有这样的数组。

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和replace来交换模板中的变量。 另外,您可以将字符串消毒为所需的格式(根据我所看到的格式,用连字符替换空格,并将字符串转换为小写字母)并替换为。 听起来您的数据比上面显示的要多,因此您可能需要在一个键为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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM