Помогите изменить цыкл перебора и вывода результата
Есть вот такой скрипт, он считает количество каждого символа.
// регвыр символов, которые учавствуют в подсчёте.
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, время: 05:25. |