Максимальное количество повторов в строке.
Есть код, который удаляет повторяющиеся слова в строке., но вот сделать чтобы количество этих повторов вводилось с клавиатуры не получается. Сейчас вводится в string3 строка, переводится в массив, редактируется с помощью Go(); и возвращается в string4
Пример: мама мыла раму мама Результат: мама мыла раму Необходимо, ввести максимальное количество повторов maxrepeat = 3 Пример: мама мыла раму мама мама мама Результат: мама мама мама мыла раму Подскажите, в чем может быть проблема.
<script>
function Go(origArr) //название функции, принимает параметр (origArr)
{
var newArr = []; //будущий массив, с новыми значениями
var origLength = origArr.length; //оригинальная длина, длина массива
var found = false, i, j, n, s = false; //совпадение = ложь
for (i = 0; i < origLength; i++) //нач. значение = 0, цикл до тех пор пока i< длины массива, i++
{
found = false; //совпадение = ложь
for (j = 0; j < newArr.length; j++) //нач. значение j=0, для формирования нового массива, до тех пор пока j < длины нового массива
{
if (origArr[i] == newArr[j]) //проверяем равенсто оригинального массива, с новым массивом
{ // ==== полное равенство, по типу и ..
found = true; //совпрадение = правда
s = true;
break; //заканчиваем цикл
}
}
if (!found) //если нет совпадений
{
newArr.push(origArr[i]); // в новый массив, заносим элемент orrigArr
}
else
for(n = 0;n<maxrepeat;n++)
{
newArr.push(origArr[i]);
}
}
return newArr;
}
function newstring()
{
var tags=document.getElementById('string3').value;
var maxrepeat=document.getElementById('string2').value;
eval(maxrepeat);
tags = (tags.toLowerCase());
var re = /\s+/gi
var tagList = tags.split(re);
tagList = Go(tagList);
tagList = tagList.join(' '); // 1-2-3-4
string4.value = tagList;
}</script>
<span>Maxrepeat:</span><input type="text" id='string2' size='10' name="string2"> <br><br>
<span>Введите строку:</span><input type="text" id='string3' size='100' name="string3"> <br><br>
<input type='button' value='Удалить повторяющиеся слова' onclick='newstring();' /><br><br>
<span>Обработанная строка</span> <input type="text" id='string4' size='100' name="string4" readonly>
|
opilune,
:-?
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<script>
function newstring() {
var tags = document.getElementById('string3').value.toLowerCase(),
maxrepeat = +document.getElementById('string2').value || 1,
rezult = document.getElementById('string4'),
repeat = {};
tags = tags.replace(/\S+/g, function (a) {
repeat[a] = repeat[a] ? ++repeat[a] : 1;
return repeat[a] > maxrepeat ? '' : a
});
rezult.value = tags;
}
</script>
<label>Maxrepeat:<input type="text" id='string2' size='10' name="string2" value=3></label><br>
<label>Введите строку:<input type="text" id='string3' size='100' name="string3" value='мама мыла раму мама мама мама'></label><br>
<input type='button' value='Удалить повторяющиеся слова' onclick='newstring();' /><br>
<label>Обработанная строка <input type="text" id='string4' size='100' name="string4" readonly></label>
</body>
</html>
|
Цитата:
|
рони, спасибо. Постараюсь разобраться.. А как еще можно сделать, чтоб был регистронезависимый поиск. без toLowerCase()?
eval(maxrepeat), я пытался преобразовать строку в число,чтобы потом по for сравнивать с n |
Цитата:
Ну и вообще-то: var str = '1'; alert(typeof +str); alert(typeof Number(str)); alert(typeof parseInt(str)); |
Цитата:
|
Цитата:
маМа(1-1) мыла(1-2) Раму(1-3) мама(1-4) мама(2-1) мыла(2-2) раму(2-3) мама(2-4) нашли повторяющиеся слова 2-1 и 2-4, в результат пишем 1-1, 1-2, 1-3. как-то так) хотя в нижнем регистре проще) |
Цитата:
|
| Часовой пояс GMT +3, время: 18:48. |