3

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

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;
    }
}

截屏:

截屏

4

1 回答 1

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
于 2010-03-31T05:11:05.753 回答