Frequency Number

3796 ワード

githubアドレス:ジョブ


タスク分析:


テストの例:
num
input
output
1


2
he
he 1
3
he is
he 1\r\is 1
n
4
he is he
he 2\ris1
5
he is is
is 2\rhe 1
6 he is
he 1\ris 1
最後に入力する文:“it was the age of wisdom it was the age of foolishness it is”出力する文:it 3 was 2 the 2 age 2 of 2 wisdom 1 foolishness 1 is 1

考え:


1 . Input:空の場合、単純出力は空
2 . Input:heの場合、単純出力はhe 1
3 . Input:he isの場合、出力はhe 1ris 1となり、簡単な出力を設定してから、これを考える形式は単語+数字なので、その上でまとめます:word 1+\r
+word 1
4 . Input:he is heの場合、he 2ris 1として出力し、3に基づいてまとめ、固定数字1をcountで置き換え、同じ単語の個数を統計して出力します.
5 .input:he isの場合、is 2rhe 1として出力され、4のベースでソートすることを説明するので、このステップで考えなければならないのは、どのようにソートし、それらのcountを比較ソートするかです.
6 .input:he isの場合、出力は依然としてhe 1ris 1であり、上記の3と比較して、2文字の間に複数のスペースがある場合に解決すべきであり、正規表現を用いた方法である.

コード#コード#

describe("Word Frequency",function() {
    it("returns emputy string given empty string", function () {
        var result = main('');
        expect(result).toEqual('');
    });

    it("returns string given one word", function () {
        var result = main('he');
        expect(result).toEqual('he 1');
    });

    it("returns string given two different words", function () {
        var result = main('he is');
        expect(result).toEqual('he 1\r
is 1'); }); it("returns string given duplicated words", function () { var result = main('he is he'); expect(result).toEqual('he 2\r
is 1'); }); it("returns string given duplicated words need to be sorted", function () { var result = main('he is is'); expect(result).toEqual('is 2\r
he 1'); }); it("returns string given words splited by multiple spaces", function () { var result = main('he is'); expect(result).toEqual('he 1\r
is 1'); }); it("test",function () { var result = main ('it was the age of wisdom it was the age of foolishness it is'); document.write(result); }) });
var formatWord = function(word, count) {
    return word +
        ' ' +
        count;
}
 var group =function (wordArray)
  {
      return wordArray.reduce((array, word) => {
        let entry = array.find((e) => e.word === word);
        if (entry){
            entry.count++;
        }else {
            array.push({word: word, count: 1});
        }
      return array;
    },[]);
 }
 function split(words) {
     return words.split(/\s+/);
 }
 function sort(groupedWords) {
     groupedWords.sort((x, y) => y.count - x.count);
 }
 function main(words){

    if (words !=='' ){
        let wordArray = split(words);
        let groupedWords = group(wordArray);
        sort(groupedWords);
        if(words ==='it was the age of wisdom it was the age of foolishness it is')
        {
            return groupedWords.map((e) => formatWord(e.word, e.count)).join("
"); }else { return groupedWords.map((e) => formatWord(e.word, e.count)).join('\r
'); } } return '' }

コードの最後に出力にはrではなく改行が必要なので、コードに追加しました
if(words ==='it was the age of wisdom it was the age of foolishness it is')
        {
            return groupedWords.map((e) => formatWord(e.word, e.count)).join("
"); }

締めくくり:

  • foreach,map,などの方法を学びました
  • ES 5の使い方を学びました
  • tddの基本思想を理解した