Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поочередная замена слов (https://javascript.ru/forum/misc/58620-poocherednaya-zamena-slov.html)

karakym 06.10.2015 09:36

Lemme,
Практически так, только random'ом нужно выбирать слова (через заяпятые) из поля gruz, а здесь:
data.push(first + ' ' + rand(gorod) + ' ' + second);
Пробовал сам, но чет функция random не работает!

Lemme 06.10.2015 10:31

Цитата:

Пробовал сам
Примеры того, как пробовал.
Цитата:

функция random не работает!
в функцию rand нужно передавать массив.

karakym 06.10.2015 10:56

Lemme,
Просто поменял местами:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<style type='text/css'>
body {
  margin: auto;
}
textarea {
  height: 100px;
  width: 30%;
  margin: auto;
  border: none;
  background: #eee;
  outline: none;
}
#rescount {
  width: 8%;
  height: 100px;
  background: #eee;
  display: inline-block;
  position: fixed;
  padding: 5px;
  text-align: center;
  font-size: 3em;
}
#rescount span {
  font-size: 12px;
}
.generate {
  width: 100%;
  height: 30px;
  border: none;
  background: #eee;
  outline: none;
}
table, td {
  width: 100%;
}
td {
  background:#c2ff9b;
}
</style>
<script type='text/javascript'>
function newgen(){
var gruz = document.getElementById('gruz').innerHTML;
    gruz = gruz.replace(/\n/g, ',').split(',');
 
    var gorod = document.getElementById('gorod').innerHTML;
    gorod = gorod.split(/\n/);
 
    var avto = document.getElementById('avto').innerHTML;
    avto = avto.split(/\n/);
 
    function rand(item) {
        return item[Math.round(Math.random() * (item.length - 1))];
    }
 
    var data = [];
    gorod.forEach(function(first) {
        avto.forEach(function(second) {
            data.push(rand(gruz) + ' ' + first + ' ' + second);
        });
    });
 
    // это для примера
    data.forEach(function(item) {
        document.querySelector('tbody').innerHTML += '<td>' + item + '</td>';
    });
}
</script>
</head>
<body>
<textarea id="gruz">
Саня,Леха,Толик
Вова,Женя,Игорь</textarea>
<textarea id="gorod">
Любит
Не любит</textarea>
<textarea id="avto">
Олю
Надю
Иру
Машу
Дашу</textarea>
<div id="rescount"></div>
<br/><input type="button" onclick='newgen();' class="generate" value="СГЕНЕРИРОВАТЬ"/>
<table><tbody id="result"></tbody></table>
</body>
</html>

karakym 06.10.2015 11:03

И первое поле считается как одна строка, нужно что бы как и в остальных.
Запятой поделил строки не просто так, это как бы варианты что может быть в first

Lemme 06.10.2015 11:10

Цитата:

И первое поле считается как одна строка, нужно что бы как и в остальных.
Запятой поделил строки не просто так, это как бы варианты что может быть в first
Ты сломал мою думалку :(

karakym 06.10.2015 11:24

Lemme,
Вот не могу точно объяснить, смотри в первом поле как и в остальных есть строки, они просто комбинируются!
но еще в первом поле строки поделены запятыми, это должны быть как варианты подстановки. Каждое поле по очереди подставляет свою строку, а в первом поле подставляется случайное слово из этой строки!

karakym 06.10.2015 11:59

Lemme,
Вот этот скрипт, делает то что мне необходимо!
И в результате выходит нужное количество строк ( gruz(2)*gorod(2)*avto(5)=items(20) )
<!DOCTYPE html>
<html><head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<style type='text/css'>
body {margin: auto;}textarea {height: 100px;width: 30%;margin: auto;border: none;background: #eee;outline: none;}
#rescount {width: 8%;height: 100px;background: #eee;display: inline-block;position: fixed;padding: 5px;text-align: center;font-size: 3em;}
#rescount span {font-size: 12px;}
.generate {width: 100%;height: 30px;border: none;background: #eee;outline: none;}
table, td {width: 100%;}
td {background:#c2ff9b;}
</style><script type='text/javascript'>
function newgen(){
var cols=0;
var or=document.getElementById('result');
var rc=document.getElementById('rescount');
var gruz = document.getElementById('gruz').innerHTML;
gruz = gruz.split(/\n/);
var gorod = document.getElementById('gorod').innerHTML;
gorod = gorod.split(/\n/);
var avto = document.getElementById('avto').innerHTML;
avto = avto.split(/\n/);
 
    function rand(item) {
        return item[Math.round(Math.random() * (item.length - 1))];
    }
    or.innerHTML='';
    rc.innerHTML='';
    var data = [];
    gruz.forEach(function(rndgrz) {
      gorod.forEach(function(first) {
        avto.forEach(function(second) {
            data.push(rndgrz + ' ' + first + ' ' + second);
            cols=cols+1;
        });
      });
    });
    // это для примера
    data.forEach(function(item) {
        or.innerHTML += '<td>' + item + '</td>';
    });
    rc.innerHTML=cols;
}
</script></head><body>
<textarea id="gruz">
Саня,Леха,Толик
Вова,Женя,Игорь</textarea>
<textarea id="gorod">
Любит
Не любит</textarea>
<textarea id="avto">
Олю
Надю
Иру
Машу
Дашу</textarea>
<div id="rescount"></div><br/><input type="button" onclick='newgen();' class="generate" value="СГЕНЕРИРОВАТЬ"/>
<table><tbody id="result"></tbody></table></body></html>

Как видишь по результату мы получаем строки типа: Саня,Леха,Толик Любит Олю
Так вот Саня,Леха,Толик нужно разделить на (в данном случае 3 слова) с помощью запятых и вставить в результат только одно случайное слово!
Таких строк может быть много, так вот для каждой строки нужно одно случайное слово из этой строки, если же строка не делится запятыми, то вставляем всю строку как есть!

sanmihan 06.10.2015 12:16

<!DOCTYPE html>
<html><head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<style type='text/css'>
body {margin: auto;}textarea {height: 100px;width: 30%;margin: auto;border: none;background: #eee;outline: none;}
#rescount {width: 8%;height: 100px;background: #eee;display: inline-block;position: fixed;padding: 5px;text-align: center;font-size: 3em;}
#rescount span {font-size: 12px;}
.generate {width: 100%;height: 30px;border: none;background: #eee;outline: none;}
table, td {width: 100%;}
td {background:#c2ff9b;}
</style><script type='text/javascript'>
function newgen(){
var cols=0;
var or=document.getElementById('result');
var rc=document.getElementById('rescount');
var gruz = document.getElementById('gruz').innerHTML;
gruz = gruz.split(/\n/);
var gorod = document.getElementById('gorod').innerHTML;
gorod = gorod.split(/\n/);
var avto = document.getElementById('avto').innerHTML;
avto = avto.split(/\n/);
  
    function rand(item) {
        return item[Math.round(Math.random() * (item.length - 1))];
    }
    or.innerHTML='';
    rc.innerHTML='';
    var data = [];
    gruz.forEach(function(rndgrz) {
      gorod.forEach(function(first) {
        avto.forEach(function(second) {
			var g = rndgrz.split(',');
			g = rand(g);
            data.push(g + ' ' + first + ' ' + second);
            cols=cols+1;
        });
      });
    });
    // это для примера
    data.forEach(function(item) {
        or.innerHTML += '<td>' + item + '</td>';
    });
    rc.innerHTML=cols;
}
</script></head><body>
<textarea id="gruz">
Саня,Леха,Толик
Вова,Женя,Игорь</textarea>
<textarea id="gorod">
Любит
Не любит</textarea>
<textarea id="avto">
Олю
Надю
Иру
Машу
Дашу</textarea>
<div id="rescount"></div><br/><input type="button" onclick='newgen();' class="generate" value="СГЕНЕРИРОВАТЬ"/>
<table><tbody id="result"></tbody></table></body></html>

karakym 06.10.2015 13:10

Все отлично, все как надо! Только вот еще вопрос остался:
По нажатию на клавишу сгенерировать происходит
onclick='newgen();'

Но вот если вписать другие значения в поля, то в результате остаются прежние!
Почему не перезаписывает в переменные новые данные полей?

karakym 06.10.2015 13:25

Разобрался!
document.getElementById('gruz').innerHTML;

В полях отлавливаем значение и сразу режем:
document.getElementById('gruz').value.split(/\n/);


Часовой пояс GMT +3, время: 21:42.