Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подсчета кол-ва вхождений каждого символа в строке. (https://javascript.ru/forum/misc/32744-podscheta-kol-va-vkhozhdenijj-kazhdogo-simvola-v-stroke.html)

Jeremen 28.10.2012 21:38

Подсчета кол-ва вхождений каждого символа в строке.
 
Здрасте. Помогите с решением задачи: "Подсчета кол-ва вхождений каждого символа в строке". Вроде бы задача простая но что-то в голову не лезет ничего. Один из вариантов это набить массив всеми символы в строке по разу, а затем в цикле проверить каждый символ в этом массиве, но по моему туповатое решение какое-то, у кого какие идеи?

a_l 28.10.2012 22:14

Цитата:

Один из вариантов это набить массив всеми символы в строке по разу, а затем в цикле проверить каждый символ в этом массиве, но по моему туповатое решение какое-то, у кого какие идеи?
Ничего другого в голову не приходит.
Массив можно сделать из строки:
var alph= ("абвгдеё").split("");

lord2kim 28.10.2012 22:32

a_l, строка и так является массивом
alert("абвгдеё".length);

только для обращения к элементам нужно использовать метод charAt() иначе не кроссбраузерно(((

melky 28.10.2012 22:33

// регвыр символов, которые учавствуют в подсчёте.
var allowed = /[а-яё]/i;

// собираем информацию :
var results = Array.prototype.reduce.call("Подсчета кол-ва вхождений каждого символа в строке", function (data, letter) {

    if (allowed.test(letter)) {
    
        letter = letter.toLowerCase();
    
        if (data[letter] === undefined) {
            data[letter] = 0;
        }
    
        data[letter] += 1;
        
    }
    
    return data;

}, {});

// выводим:
for (var letter in results) {
    alert('Символ "' + letter + '" повторяется "' + results[letter] + '" раз.');
}

saturn 29.10.2012 01:05

Вот:

function count_char(str){
                count = str.length;
                var res = 0;
                for(i=0; i < count; i++){
                    if(str.charAt(i) == " "){
                        continue
                    }
                    res++;
                }
             return res;
            }

lord2kim 29.10.2012 09:49

Дзен-трансгуманист, хорошо...массивом букв)

melky 29.10.2012 11:34

Цитата:

Сообщение от lord2kim (Сообщение 212815)
Дзен-трансгуманист, хорошо...массивом букв)

не совсем массив, и не совсем букв :lol:
http://es5.javascript.ru/x8.html#x8.4

saturn 31.10.2012 02:06

Ну объясните тогда почему неправильное решение раз уж мне минус кто-то (жирный) поставил
и написал что "неправильное решение"

Так и хочется сказать: "Разуй глаза криворукое...!!!, имбицилу которое минусы лепит"

vigen 10.06.2014 01:10

Подсчета кол-ва вхождений каждого символа в строке.
 
:thanks:
Цитата:

Сообщение от saturn (Сообщение 212795)
Вот:

function count_char(str){
                count = str.length;
                var res = 0;
                for(i=0; i < count; i++){
                    if(str.charAt(i) == " "){
                        continue
                    }
                    res++;
                }
             return res;
            }

Kратко, внятно, грамотно. Только одно замечание: в место "continue" "res++" надо.

depp 10.06.2014 01:34

var string = 'Подсчета кол-ва вхождений каждого символа в строке',
    sums = {};

string.split('').map(function(e){
    //e = e.toLowerCase(); - для включения регистронезавимисомти.
    sums[e] = !sums[e] ? 1 : sums[e]+1;
});
console.log(sums);


Часовой пояс GMT +3, время: 14:56.