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 に答える