代码之家  ›  专栏  ›  技术社区  ›  Ben

Javascript列格式字符串

  •  4
  • Ben  · 技术社区  · 14 年前

    尽管我在C和Java中使用过它,但我忘记了使用占位符在文本输出中生成列的基本输出方法:

    Oakenshield     Thorin
    Baggins         Bilbo
    Gray, the       Gandalf
    

    然后,一旦知道了这个函数,我在哪里可以找到一个独立的库来用Javascript实现它呢?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Frédéric Hamidi    14 年前

    你是说 sprintf() width format specifier (例如。 %20d )? 如果是的话, Javascript sprintf 确实是你的答案。

        2
  •  -1
  •   7vujy0f0hy    8 年前

    我是怎么做到的

    var data = [["Oakenshield", "Thorin"], ["Baggins", "Bilbo"], ["Gray, the", "Gandalf"]];
    var display = document.querySelectorAll("[id^=display]");
    
    Library:
        var pads = (x,len,z=" ") => (x + Array(len).fill(z).join("")).slice(0,len);
        var padn = (x,len,z=0,base) => 
            (Array(len).fill(z).join("") + x.toString(base)).slice(-len);
        var sprintf = (str, ...argv) => !argv.length ? str : 
            sprintf(str = str.replace(sprintf.token||"$", argv.shift()), ...argv);
    
    Demo1:
        var f = item => sprintf("$$\n", pads(item[0],16), pads(item[1],16));
        display[0].innerHTML = data.map(f).join("");
    
    Demo2:
        var f = (item,i) => sprintf("$ $ $ $\n", 
            padn(i,4), padn(item[1],6," "), pads(item[0],9), padn(i,4,0,2));
        display[1].innerHTML = data.map(f).join("");
    <b>Demo 1:</b><pre id="display1" style="margin-top: 0"></pre>
    <b>Demo 2:</b><pre id="display2" style="margin-top: 0"></pre>