2017-12-20 4 views
-1

Ich versuche, ein Histogramm der Anzahl der Zeichen in einer Zeichenfolge mit Javascript zu erstellen. Im Moment habe ich die Zeichenfolge bekam die Häufigkeit von Zeichen zu zeigen, aber ich versuche, es zu zeigen, wie so ..Javascript Histogramm

EG für die Zeichenfolge Hallo: a: 0 b: 0 c: 0 d: 0 e: 1 f: 0 ...

Dies ist mein Code.

class myString { 



    constructor(text) { 
    this.text = text.toLowerCase(); 
    this.text = this.text.replace(/\s/g, ''); 
    } 


    getFrequency() { 

    let string = this.text 
    var letters = {}; 
    for (var i=0; i<string.length;i++) { 
     var character = string.charAt(i); 
     if (letters[character]) { 
      letters[character]++; 
     } else { 
      letters[character] = 1; 
     } 
    } 
    return letters; 
}; 

    Histogram(){ 

     var stringBase = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']; 

     var letters = this.getFrequency(); 

     console.log(letters); 

    } 


} 

Ich möchte meinen Code auf die Konsole wie so drucken.

desired result

+2

Was ist das Problem? Was genau meinst du mit "Display"? – Pointy

+0

Drucken auf der Konsole – GurdevSingh

Antwort

1

Iterate die stringBase mit Array#map, und nehmen Sie die Grafen von letters. Wenn für einen Buchstaben keine Zählung existiert, verwenden Sie stattdessen 0. Reduzieren Sie das Array von Objekten auf ein einzelnes Objekt, indem Sie Array#assign und array spread verwenden.

class myString { 
 
    constructor(text) { 
 
    this.text = text.toLowerCase(); 
 
    this.text = this.text.replace(/\s/g, ''); 
 
    } 
 
    
 
    getFrequency() { 
 
    const string = this.text; 
 
    const letters = {}; 
 
    for(let i = 0; i < string.length; i++) { 
 
     const character = string.charAt(i); 
 
     if (letters[character]) { 
 
     letters[character]++; 
 
     } else { 
 
     letters[character] = 1; 
 
     } 
 
    } 
 
    return letters; 
 
    }; 
 

 
    Histogram() { 
 
    const stringBase = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; 
 

 
    const letters = this.getFrequency(); 
 

 
    return Object.assign({}, ...stringBase.map((l) => ({ 
 
     [l]: '*'.repeat(letters[l] || 0) 
 
    }))); 
 
    
 
    /** to display in the console directly 
 
    console.log(Object.assign({}, ...stringBase.map((l) => ({ 
 
     [l]: '*'.repeat(letters[l] || 0) 
 
    })))); 
 
    **/ 
 
    } 
 
} 
 

 
const str = new myString('hello'); 
 

 
console.log(str.Histogram());

+0

Ich füge diesen Code in und seine nicht auf der Konsole – GurdevSingh

+0

@GurdevSingh - es gibt eine Zeichenfolge, die ich in der Konsole anzeigen. Ich werde einen Kommentar hinzufügen, was Sie ändern müssen, um es direkt zu trösten. –

+0

aber ich brauche es mit der console.log in der Histogramm-Funktion verwendet werden – GurdevSingh