这是功能范式中的一个解决方案,读起来非常好:
function value(tag)
{
var key = tag.substr(1, tag.length - 2) //remove braces
return document.getElementById(key)
}
function populate(template)
{
var tagRegExp = /{.+?}/g
var tags = template.match(tagRegExp)
var values = tags.map(value)
return template.split(tagRegExp).zip(values).join("")
}
var template=">.5*{PropertyValue} + .2*{DesignValue}+ 2000 +{price}";
console.log(populate(template))
此解决方案需要一种zip
用于数组对象的方法,该方法可以按如下方式实现(除非它已由库提供)。
Array.prototype.zip = function (other) {
function zipOne(acc, x, i, a)
{
if (i < other.length) {
if (i < a.length - 1) {
return acc.concat([x, other[i]])
} else {
return acc.concat([x]).concat(other.slice(i))
}
} else {
return acc.concat([x])
}
}
return this.reduce(zipOne, [])
}