2014-11-09 2 views
0

Например для ввода "olly olly in come free"Подсчитайте появление каждого слова в фразы, используя JavaScript

Программа должна возвращать:

olly: 2 in: 1 come: 1 free: 1

Проверки записываются как:

var words = require('./word-count'); 

describe("words()", function() { 
    it("counts one word", function() { 
    var expectedCounts = { word: 1 }; 
    expect(words("word")).toEqual(expectedCounts); 
    }); 

//more tests here 
}); 
  1. Как начать в моем word-count.js файле? Создайте метод words() или модуль Words() и создайте метод expectedCount и экспортируйте его?

  2. Я обрабатываю строку как массив или объект? В случае объектов, как мне начать разбивать их на слова и перебирать счет?

ответ

4
function count(str){ 
    var obj={}; 
    str.split(" ").forEach(function(el,i,arr){ 
    obj[el]= obj[el]? ++obj[el]: 1; 
    }); 
    return obj; 
} 
console.log(count("olly olly in come free")); 

Этот код должен получить именно то, что вы хотите.
Для лучшего понимания кода я бы посоветовал вам пройти через функции прототипа массива и функции прототипа строки.
Для простого понимания того, что I`m делает здесь:

  1. Создать функцию подсчета, которая возвращает объект подсчета всех вхождений слов.
  2. Разделите строку, используя split(" ") на основе пространства, которое дает массив.
  3. Используйте метод forEach для повторения всех элементов в переплетенной решетке.
  4. троичный оператор :?, чтобы проверить, если значение уже существует, если она увеличивается на единицу или присвоить ему 1.

Array.prototype String.prototype

+0

xBrow ser note: 'forEach был добавлен к стандарту ECMA-262 в 5-м издании' –

+0

Кроме того, если вам нужно сделать регистр нечувствительным к регистру' el = el.toLowerCase(); 'может помочь. –

0

Вот как вы это делаете

слово- count.js

function word-count(phrase){ 
    var result = {}; // will contain each word in the phrase and the associated count 
    var words = phrase.split(' '); // assuming each word in the phrase is separated by a space 

    words.forEach(function(word){ 
     // only continue if this word has not been seen before 
     if(!result.hasOwnProperty(word){ 
      result[word] = phrase.match(/word/g).length; 
     } 
    }); 

    return result; 
} 

exxports.word-count = word-count; 
Смежные вопросы