javascript摘要功能

时间:2010-03-31 05:05:12

标签: javascript function summary

我试图根据元素容器的大小制作一个小名称汇总函数,这就是我所拥有的;

function shorten_text(str, size){
    size = size.match( /[0-9]*/ );
    var endValue = Math.floor( Number(size) / 10 );
    var number;
    var newStr;
    for ( number = 0; number <= endValue; number++ ) {
        if( str[number].length != 0 ) {
            newStr += str[number];
        }
    }   
    return newStr + '...';

}
shorten_text('Phil Jackson', '94px');
// output should be 'Phil Jack...'

我似乎得到的是undefinedundef ... 任何人都可以看到我错在哪里?

编辑:

根据以下评论修改代码,以搜索任何使用此类功能的人:

function shorten_text(str, size){
    size = parseInt(size);
    var endValue = Math.floor(size / 10);
    if( str.length > endValue ) {
        return str.substring(0, endValue) + '...';
    }else{
        return str;
    }
}

屏幕拍摄:

screenshot http://www.freeimagehosting.net/uploads/4639663b52.gif

1 个答案:

答案 0 :(得分:3)

您需要使用空字符串初始化newStr变量,否则该变量将包含undefined值,在连接时将转换为字符串,例如:

var test; // at this moment the variable contains the undefined value
test += 'foo';
// now test contains "undefinedfoo"

在你的功能中:

function shorten_text(str, size){
    size = size.match( /[0-9]*/ );
    var endValue = Math.floor( Number(size) / 10 );
    var number;
    var newStr = '';
    for ( number = 0; number <= endValue; number++ ) {
        if( str[number].length != 0 ) {
            newStr += str[number];
        }
    }   
    return newStr + '...';
}

shorten_text('Phil Jackson', '94px'); //  outputs "Phil Jacks..."

一些评论:

  • 您不需要致电Number(size),因为除法运算符会进行类型强制。隐式
  • 您可以使用substring方法获取原始字符串的一部分。
  • 某些实现可能不支持使用方括号属性访问器访问字符串的字符,您可以使用标准charAt方法(str.charAt(i)

另一种方法:

function shorten_text(str, size){
    var endValue = Math.floor(parseInt(size) / 10);
    return str.substring(0, endValue) + '...';
}

shorten_text('Phil Jackson', '94px'); //  outputs "Phil Jack..." as expected