2016-04-12 15 views
-1

Ich versuche folgendes zu erreichen:einen String in Javascript Kürzen

Kürzt einen String (erstes Argument), wenn es länger als die vorgegebene maximale Stringlänge (zweites Argument) ist. Geben Sie die abgeschnittene Zeichenfolge mit einem ... ending zurück.

Beachten Sie, dass das Einfügen der drei Punkte zum Ende die Länge des Strings erhöht.

Wenn jedoch die angegebene maximale Zeichenfolgenlänge num kleiner oder gleich 3 ist, addiert die Addition der drei Punkte nicht zur Zeichenfolgenlänge bei der Bestimmung der abgeschnittenen Zeichenfolge.

Der Code, den ich habe, wird nur bestanden, wenn mein num> 2, sonst scheitert es.

function truncateString(str, num) { 
    // Clear out that junk in your trunk 
    var trunString = ""; 
    if (str.length > num) { 
    trunString = str.slice(0, (num -3)) + "..."; 
    return trunString; 
    } 
    return str; 
} 

truncateString("A-", 1); 

eine Lösung gefunden:

var trunString = ""; 
    if (str.length > num && num >= 4) { 
    trunString = str.slice(0, (num - 3)) + "..."; 
    return trunString; 
    } 
    else if (str.length > num && num <= 3) { 
    trunString = str.slice(0, (num)) + "..."; 
    return trunString; 
    } 
+1

Hinweis helfen: Anstelle von 3 Punkten (3 Zeichen), vielleicht können Sie auf die Ellipsen verwenden '...' Zeichen selbst (Zeichen). – techfoobar

+0

Oder betrachte diese '3' Zeichen während der Manipulation..Wie https://jsfiddle.net/rayon_1990/w7to3g5p/ – Rayon

+1

Es wird, wie Sie 3 von Ihrem num subtrahieren. Wenn es 2 oder kleiner ist, dann produziert 2 entweder 0 oder negativ und Ihr Slice funktioniert nicht bei negativen Zahlen. – LearningPhase

Antwort

0
function truncateString(str, num) { 
    // clear out that junk in your trunk 
    var trunString = ''; 
    if (str.length && str.length > num) { 
    trunString = str.slice(0, num - 1) + '&hellip;'; 
    return trunString; 
    } 
    return str; 
} 

truncateString("A-", 1); 

PS: auch &hellip HTML entity helfen ...

+0

Dieser Code wird nur funktionieren, wenn num = <2. – victoria

+0

Sie haben Recht, sorry ... Ich werde es so schnell wie möglich beheben ... – MarcoS

+0

Meine Antwort geht davon aus, dass die Stringlänge die Anzahl der gerenderten Zeichen ist ("& hellip;". Length === 1), und nicht die Länge der Zeichenfolge in Javascript. Hoffe, es erfüllt Ihre Anforderungen ... – MarcoS

1

Sie könnten verwenden, um einen conditional (ternary) operator?: @techfoobar Kommentar lesen, mit

function truncateString(str, num) { 
 
    return str.length > num ? 
 
     str.slice(0, num > 3 ? num - 3 : num) + "..." : 
 
     str; 
 
} 
 

 
console.log(truncateString("Abcdefghijk", 5)); 
 
console.log(truncateString("A-", 1)); 
 
console.log(truncateString("Alpha", 5)); 
 
console.log(truncateString("Beta", 5)); 
 
console.log(truncateString("Epsilon", 3));

+1

Up gewählt als Ihre Lösungen sind immer eleganten Code. Die Frage ist jedoch etwas unklar. Es scheint, OP will immer "..." zur Ausgabe hinzufügen und Länge> n, wenn n <3. – Roberto

+1

Sie will die Punkte Länge von 'num' subtrahieren ... – MarcoS

+0

Wenn Sie diesen Code ausführen, funktioniert es nicht . Alpha und Beta haben keine Ellipsen. – victoria

-1

Dies ist meine Lösung, in der Hoffnung Sie

function truncate(str, num) { 
     // Clear out that junk in your trunk 
     var newStr; 
     if(num>3&&num<str.length){ 
     newStr=str.slice(0,num-3)+"..."; 
     }else if(num>=str.length){ 
     newStr=str; 
     }else{ 
     newStr=str.slice(0,num)+"..."; 
     } 
     return newStr; 
    } 

    truncate("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length); 
+0

Fügen Sie einige Erklärungen zu Ihrer Antwort hinzu, anstatt nur den Code zu posten. –