Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.02.2014, 15:41
Новичок на форуме
Отправить личное сообщение для opilune Посмотреть профиль Найти все сообщения от opilune
 
Регистрация: 23.02.2014
Сообщений: 3

Максимальное количество повторов в строке.
Есть код, который удаляет повторяющиеся слова в строке., но вот сделать чтобы количество этих повторов вводилось с клавиатуры не получается. Сейчас вводится в 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>
Ответить с цитированием
  #2 (permalink)  
Старый 23.02.2014, 16:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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>
Ответить с цитированием
  #3 (permalink)  
Старый 23.02.2014, 17:13
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от opilune
eval(maxrepeat);
WTF???
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 23.02.2014, 19:08
Новичок на форуме
Отправить личное сообщение для opilune Посмотреть профиль Найти все сообщения от opilune
 
Регистрация: 23.02.2014
Сообщений: 3

рони, спасибо. Постараюсь разобраться.. А как еще можно сделать, чтоб был регистронезависимый поиск. без toLowerCase()?



eval(maxrepeat), я пытался преобразовать строку в число,чтобы потом по for сравнивать с n
Ответить с цитированием
  #5 (permalink)  
Старый 23.02.2014, 19:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от opilune
eval(maxrepeat), я пытался преобразовать строку в число,чтобы потом по for сравнивать с n
Дык ты просто евалишь строку, а результат евала уходит в никуда, вкурсе?

Ну и вообще-то:

var str = '1';

alert(typeof +str);
alert(typeof Number(str));
alert(typeof parseInt(str));
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 23.02.2014, 19:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от opilune
А как еще можно сделать, чтоб был регистронезависимый поиск. без toLowerCase()?
а как иначе сделать условие похожести слов? если не приводить слова к одинаковому виду
Ответить с цитированием
  #7 (permalink)  
Старый 24.02.2014, 00:04
Новичок на форуме
Отправить личное сообщение для opilune Посмотреть профиль Найти все сообщения от opilune
 
Регистрация: 23.02.2014
Сообщений: 3

Сообщение от рони Посмотреть сообщение
а как иначе сделать условие похожести слов? если не приводить слова к одинаковому виду
создать еще некий массив, который будет содержать строку в нижнем регистре, искать дубликат слов, и если не найден, то записать слово по номеру в результат.. Сам написал, не понял что.. На примере подробней покажу.

маМа(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.

как-то так) хотя в нижнем регистре проще)
Ответить с цитированием
  #8 (permalink)  
Старый 24.02.2014, 00:23
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от opilune
Сам написал, не понял что.. На примере подробней покажу
Думаете, после примера стало понятнее?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количество символов в строке. allanmiln Events/DOM/Window 10 14.11.2014 09:18
Как получить количество дней до определенной даты beard Общие вопросы Javascript 3 24.06.2012 17:22
Ограничить количество символов в textarea iNfantry jQuery 2 14.05.2012 11:35
Как определить какого типа данные в строке den9000 Общие вопросы Javascript 7 07.12.2010 10:57
как узнать количество точек в строке? robinner Общие вопросы Javascript 2 16.06.2010 21:13