Crockford的.supplant有多个级别的对象

Tyl*_*hea 4 javascript

/** Supplant **/
String.prototype.supplant = function(o) {
    return this.replace (/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};
Run Code Online (Sandbox Code Playgroud)

Crockford毫无疑问是一个JavaScript大师精灵,但是当涉及多个级别的对象时,他的原型缺乏.

我希望此功能涵盖多级对象替换,例如'{post.detailed}'任何人都可以帮我修改替换版本吗?

Ber*_*rgi 5

这不应该太困难.请改用此替换功能:

function (a, b) {
    var r = o,
        parts = b.split(".");
    for (var i=0; r && i<parts.length; i++)
        r = r[parts[i]];
    return typeof r === 'string' || typeof r === 'number' ? r : a;
}
Run Code Online (Sandbox Code Playgroud)