我有这样的数组。
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
的对象。我试图使用正则表达但失败。我不擅长正则表达
请帮忙。
答案 0 :(得分:1)
您可以使用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, '');
}
});