采用js实现国际化的时候,通常需要传递一些参数。var pattern = "hello, {0}. welcome you come back!";
通过接口,String.format(pattern, "John");来显示
hello, John. welcome you come back!如果我现在传递参数大于1个,在方法中继续添加参数就可以,即
var pattern = "{0}-{1}-{2}";
String.format(pattern, "p1", "p2", "p3");现在的问题是,我想封装一个方法,让程序自己实现判断是一个参数还是多个参数。
function display(pattern, params){
// 这个时候,参数封装在params这个数组里
// 实现提示信息的国际化
}谢谢啦~~~

解决方案 »

  1.   

    String.format是微软的Javascript扩展,猜想是想实现“传递参数数组而不是由一至多个参数+逗号形式的参数列表,完成String.format”功能,并不严谨地实现如下:
    var display = function (pattern, params) {
    var i = 0;
    while (params.length) {
    pattern = pattern.replace('{' + i + '}', params.shift());
    i++;
    }
    return pattern.replace(/{\d+}/g, '');
    };var str = display("{0},{1},{3},{10}", [1, 2, 3, 5]);
    alert(str);
      

  2.   

    String.format是微软的Javascript扩展,猜想你的目的是“使用参数数组而非由逗号分隔的参数列表实现String.format()方法”,不严谨地实现如下:
    var display = function (pattern, params) {
    var i = 0;
    while (params.length) {
    pattern = pattern.replace('{' + i + '}', params.shift());
    i++;
    }
    return pattern.replace(/{\d+}/g, '');
    };var str = display("{0},{1},{3},{10}", [1, 2, 3, 5]);
    alert(str);
      

  3.   

    String.format是微软的Javascript扩展,猜想你的目的是“使用参数数组而非由逗号分隔的参数列表实现String.format()方法”,不严谨地实现如下:
    var display = function (pattern, params) {
    var i = 0;
    while (params.length) {
    pattern = pattern.replace('{' + i + '}', params.shift());
    i++;
    }
    return pattern.replace(/{\d+}/g, '');
    };var str = display("{0},{1},{3},{10}", [1, 2, 3, 5]);
    alert(str);回复了两次没有刷新
      

  4.   

    在js方法中参数名只是个代号,传入方法的诗歌arguments数组
    判断参数个数 arguments.length
    使用的话就是agguments[index]
      

  5.   

    读了下源文件,直接使用其内容方法,代码只有一行如下:
    var display = function (pattern, params) {
    return String._toFormattedString(false, [pattern].concat(params));
    };
    var str = display("{0},{1},{3},{10}", [1, 2, 3, 5]);
    alert(str);
      

  6.   

    把params作为一个字串变量,多个参数在字串里用逗号或其它分隔符分隔,在函数里用SPLIT切分成数组即可,然后可以检测数组的长度,即 数组.length。
      

  7.   

    arguments.length获得实际传入的参数
    arguments.callee.length获得本应传入的参数
    对于实际传入的参数 可以用arguments[i]来获取