JavaScript string.format

  • 1039
  • 0

摘要:JavaScript string.format

很容易可以 google到像這樣的片段:

var format = function(src){
    if (arguments.length == 0) return null;
    var args = Array.prototype.slice.call(arguments, 1);
    return src.replace(/\{(\d+)\}/g, function(m, i){
        return args[i];
    });
};

不過最近需要把物件轉成 html,這樣用有點囉嗦:

format("<a href="{0}"><img alt="{2}" src="{1}" title="{2}" /></a>", obj.href, obj.src, obj.title);

自己改了一個(自以為)比較順手的工具:

function format(templete, obj) {
    //console.log("arguments = ", arguments);
    if (!obj) return "";
    var ret = templete.replace(/\{([^\}]+)\}/g, function (m, i) {
        var path = i.split("."), data = null;
        if (path.length == 1) {
            data = obj[i];
        } else {
            for (var level = 0, j = path.length; level < j; level++) {
                if (data) {
                    data = data[path[level]];
                }
                else {
                    data = obj[path[level]];
                }
            }
        }
        return data||"";
    });
    //console.log("return = ", ret);
    return ret;
};

// 如果有這樣的物件
var obj = {
    "A": {
        "P1": {
            "src": "//www.google.com.tw/images/srpr/logo3w.png",
            "title": "P1",
            "href": "P1"
        }
    }
};
// 可以這樣使用
document.write(format('[a href="{A.P1.href}"][img src="{A.P1.src}" title="{A.P1.title}" alt="{A.P1.title}" /][/a]', obj));​​

on jsfiddle: