【问题标题】:javascript summary functionjavascript总结函数
【发布时间】:2010-03-31 05:05:12
【问题描述】:

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

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... 谁能看到我哪里出错了?

编辑:

基于以下 cmets 的修订代码适用于任何在谷歌上搜索此类功能的人:

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

屏幕截图:

【问题讨论】:

  • 您是否假设每个字符都是一个像素宽?这是如何工作的?
  • 我已经添加了截图来展示。
  • 谢谢。我仍然不明白为宽度的每个像素添加 1 个字符如何为您工作,因为每个字符的宽度肯定大于 1 个像素。

标签: javascript function summary


【解决方案1】:

您需要使用空字符串初始化您的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..."

几个cmets:

  • 您不需要调用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

【讨论】:

  • 非常感谢,非常有用。我是来学习的! (并且像魅力一样工作)
  • tuche,确实节省时间和空间!
  • 较短的 short_text 输出的答案略有不同(“Jack”而不是“Jacks”)——如果你想要相同的答案,则需要“+1”。我要删除我自己现在多余的答案。
  • @Darius:是的,我注意到了这一点,但 OP 希望得到“Phil Jack...”(查看对问题的评论)
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 2013-08-01
  • 2021-10-27
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
相关资源
最近更新 更多