Помогите изменить цыкл перебора и вывода результата
Есть вот такой скрипт, он считает количество каждого символа.
// регвыр символов, которые учавствуют в подсчёте. 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"); |
<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> |
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> |
SmartWare,
и в чем проблема и что делает это? s = (counter.innerHTML = this.value); |
destus,
Ну вообще должно бы читать текст из textarea id="counter" но ответ undefined |
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> |
destus,
Спасибо! Это оно) |
destus,
Тут ещё одна проблемка, в архиве файл index.php в нем ваш скрипт вы поймете что я хочу когда запустите посмотрите в общей сложности он работает но не правильно https://cloud.mail.ru/public/7mcm/LhFApTgAx |
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> |
destus,
Спасибо большое, я детально изучу принцип работы скрипта. Если будут какие-то вопросы с прошивкой телефонов, или настройкой и ремонтом пк, обращайтесь. Ещё раз спасибо за уделенное время. |
Часовой пояс GMT +3, время: 07:30. |