Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите изменить цыкл перебора и вывода результата (https://javascript.ru/forum/misc/61643-pomogite-izmenit-cykl-perebora-i-vyvoda-rezultata.html)

SmartWare 28.02.2016 06:21

Помогите изменить цыкл перебора и вывода результата
 
Есть вот такой скрипт, он считает количество каждого символа.

// регвыр символов, которые учавствуют в подсчёте.
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] + '" раз.');
}

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

Мне нужно чтобы результат выводился не по одной букве как сейчас, а в таком виде (пример на слове "Хорошо": 'Символы "х","о","р","ш" повторяется "1,3,1,1" раз.').

Можно даже разделить символы и количество на два alert();
Сначала буквы alert("х","о","р","ш"); потом количество alert("1,3,1,1");

destus 28.02.2016 08:03

<script>
        // регвыр символов, которые учавствуют в подсчёте.
        var allowed = /[а-яё]/i,
            letterString = new String,
            countRepeatString = new String,
            s = "Хорошо";

        // собираем информацию :
        var results = Array.prototype.reduce.call(s, 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) {
            letterString += letter + ", ";
            countRepeatString += results[letter] + ', ';
        }
        alert('пример на слове "'+ s +'": Символы ' + letterString.substr(0, letterString.length - 2) + ' повторяется ' + countRepeatString.substr(0, countRepeatString.length - 2) + ' раз');
    </script>

SmartWare 28.02.2016 17:00

destus,
Спасибо, это то что нужно, ну теперь проблема, текст я беру с textarea через textarea.onkeyup.
<form action="?" method="post">
<textarea name="comments" cols=38 rows="7" id="counter"></textarea>
</form>

<script>
        var textarea = document.getElementsByName("comments")[0];

        textarea.onkeyup = function() {
        // регвыр символов, которые учавствуют в подсчёте.
        var allowed = /[а-яё]/i,
            letterString = new String,
            countRepeatString = new String,
            s = (counter.innerHTML = this.value);

        // собираем информацию :
        var results = Array.prototype.reduce.call(s, 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) {
            letterString += letter + ", ";
            countRepeatString += results[letter] + ', ';
        }
        alert('пример на слове "'+ s +'": Символы ' + letterString.substr(0, letterString.length - 2) + ' повторяется ' + countRepeatString.substr(0, countRepeatString.length - 2) + ' раз');
       }
    </script>

destus 28.02.2016 17:56

SmartWare,
и в чем проблема и что делает это? s = (counter.innerHTML = this.value);

SmartWare 28.02.2016 18:00

destus,
Ну вообще должно бы читать текст из textarea id="counter" но ответ undefined

destus 28.02.2016 18:04

SmartWare,
<script>
        document.addEventListener('DOMContentLoaded', function () {
            var textarea = document.getElementsByName("comments")[0];

            textarea.onkeyup = function () {
                // регвыр символов, которые учавствуют в подсчёте.
                var allowed = /[а-яё]/i,
                    letterString = new String,
                    countRepeatString = new String,
                    s = this.value;

                // собираем информацию :
                var results = Array.prototype.reduce.call(s, 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) {
                    letterString += letter + ", ";
                    countRepeatString += results[letter] + ', ';
                }
                alert('пример на слове "' + s + '": Символы ' + letterString.substr(0, letterString.length - 2) + ' повторяется ' + countRepeatString.substr(0, countRepeatString.length - 2) + ' раз');
            }
        })
       
    </script>

    <form action="?" method="post">
        <textarea name="comments" cols=38 rows="7" id="counter"></textarea>
    </form>

SmartWare 28.02.2016 18:16

destus,
Спасибо! Это оно)

SmartWare 28.02.2016 19:06

destus,
Тут ещё одна проблемка, в архиве файл index.php в нем ваш скрипт
вы поймете что я хочу когда запустите посмотрите
в общей сложности он работает но не правильно
https://cloud.mail.ru/public/7mcm/LhFApTgAx

destus 28.02.2016 20:19

SmartWare,
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>ТИТЛ</title>
    <link rel="stylesheet" href="header.css" />
    <script src='Chart.min.js'></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>

    <form action="?" method="post">
        <textarea name="comments" cols=38 rows="7" id="counter"></textarea>
    </form>

    <!-- Гистограмма -->
    </br></br>
    <canvas id="income" width="600" height="400"></canvas>
    <script>
        var income = document.getElementById("income").getContext("2d");
        var barData = {
            labels: [],
            datasets: [
                {
                    fillColor: "#48A497",
                    strokeColor: "#48A4D1",
                    data: []
                }
            ]
        }
        new Chart(income).Bar(barData);
    </script>

    <script>
        document.addEventListener('DOMContentLoaded', function () {
            var textarea = document.getElementsByName("comments")[0];

            textarea.onkeyup = function () {
                // регвыр символов, которые учавствуют в подсчёте.
                var allowed = /[а-яё]/i,
                    s = this.value;

                // собираем информацию :
                var results = Array.prototype.reduce.call(s, function (data, letter) {

                    if (allowed.test(letter)) {

                        letter = letter.toLowerCase();

                        if (data[letter] === undefined) {
                            data[letter] = 0;
                        }

                        data[letter] += 1;

                    }
                    return data;

                }, {});
                barData.labels = []
                barData.datasets[0].data = [];
                // выводим:
                for (var letter in results) {
                    barData.labels.push(letter);
                    barData.datasets[0].data.push(results[letter]);
                    new Chart(income).Bar(barData);
                }
        }
        });
    </script>
</body>
</html>

SmartWare 28.02.2016 20:33

destus,
Спасибо большое, я детально изучу принцип работы скрипта.
Если будут какие-то вопросы с прошивкой телефонов, или настройкой и ремонтом пк, обращайтесь.
Ещё раз спасибо за уделенное время.


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