Максимальное количество повторов в строке.
Есть код, который удаляет повторяющиеся слова в строке., но вот сделать чтобы количество этих повторов вводилось с клавиатуры не получается. Сейчас вводится в 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, время: 19:44. |