2016-10-15 2 views
3

Это мой первый вопрос на Stack, поэтому, пожалуйста, извините меня, если я не буду спрашивать об этом правильно.Basic Javascript Упражнение

Я пытаюсь решить основное упражнение, которое просит меня создать функцию с именем countCharacters, который принимает два параметра, символ и строку. Он должен возвращать количество символов, присутствующих в строке. Это то, что у меня есть до сих пор:

function countCharacters(char, string) { 

    return string.indexOf(char); 

} 

Пожалуйста, дайте мне знать, где я ошибся. Я все еще изучаю базовый JavaScript, и я ценю любые отзывы!

+0

http://stackoverflow.com/questions/18679576/counting-words-in-string –

+0

Ваша функция вернет указатель символа в строке. Это первая позиция, которую он нашел. – ksav

ответ

-1

То, что вы делаете неправильно, заключается в том, что вы находите положение символа вместо количества раз, которое оно произошло в строке. Обратите внимание: string.indexOf(char); дает вам индекс (положение) вхождения char в вашем string.

+0

@ Dave2e OP спросил: «Пожалуйста, дайте мне знать, где я ошибся», и я ответил, где он поступил не так. Вопрос уже отмечен дубликатом (после того, как я уже ответил). Тем не менее я уточню свой ответ. –

0

Самый простой метод, который вы можете думать о том, чтобы использовать цикл, который проверяет каждый символ, и обновляет счетчик:

console.log(countCharacters('a', 'abbabaa')); 
 

 
function countCharacters(char, string) { 
 
    var counter = 0; 
 
    for(var i=0; i<string.length; i++){ 
 
     if(string[i] === char){ counter++; } 
 
    } 
 
    return counter; 
 
}

Вы также можете использовать регулярные выражения, чтобы удалить символ, не один, и возвращает новую длину:

console.log(countCharacters('a', 'abbabaa')); 
 

 
function countCharacters(char, string) { 
 
    var regex = new RegExp('[^' + char + ']', 'g'); 
 
    return string.replace(regex,'').length; 
 
}

... или использовать filter:

console.log(countCharacters('a', 'abbabaa')); 
 

 
function countCharacters(char, string) { 
 
    return string.split('').filter(c => c===char).length; 
 
}

В коде, вы используете indexOf, которая возвращает позицию первого вхождения символа. Он не считает их.