Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Как создать двумерный массив с помощью циклов. (https://javascript.ru/forum/project/33906-kak-sozdat-dvumernyjj-massiv-s-pomoshhyu-ciklov.html)

dima*** 13.12.2012 17:01

Как создать двумерный массив с помощью циклов.
 
Вот текст:
а="Мама мыла раму.Сын пошёл учиться.Щенок весело гавкал."
Как создать двумерный массив с помощью циклов.Разделители,сначала-точка,затем-пробел.
Должно получиться:
a=[ Мама,мыла,раму ]
[ Сын,пошёл,учиться ]
[ Щенок,весело,гавкал]

Решение есть,но нужно чтобы иполучилось b[i][j] c помощью цикла.

а="Мама мыла раму.Сын пошёл учиться.Щенок весело гавкал.";

pat=/\./;b=a.split(pat);for(i=0;i<b.length;i++){document.w rite(b[i]+'<br>');}reg=/\s/;c=b[0].split(reg);for(i=0;i<c.length;i++){ document.write(c[i]+'<br>');}

Gozar 14.12.2012 00:42

dima***,
Ты понимаешь что в любом случае получишь объект? В js нет двумерных массивов.

dima*** 14.12.2012 09:52

Понятно.А как сделать-то?

рони 14.12.2012 12:15

Цитата:

Сообщение от dima***
Понятно.А как сделать-то?

Читать документацию!!!
Для медитации ...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
  <title></title>
</head>
<body>
<script>
var a = "Мама мыла раму.Сын пошёл учиться.Щенок весело гавкал.",
    pat = /[^.]+/g,
    b = a.match(pat);
for (var i = 0; i < b.length; i++) {
    document.write(b[i] + '<br>');
    var reg = /\s/;
    b[i] = b[i].split(reg);
    for (var j = 0; j < b[i].length; j++) {
        document.write(b[i][j] + '<br>');
    }
}
a = b;
document.write(a)
</script>
</body>
</html>

dima*** 14.12.2012 12:36

Рони-спасибо огромное!!!:)
Целый месяц бился.Что-то похожее делал,но в Adobe Dreamweawer не получалось.Сейчас буду разбираться,где ошибка была.

dima*** 14.12.2012 13:58

Рони,первый раз вижу такую констукцию.Везде пишут for(i=0;i=a.length;i++){for(j=0;j=a.length;j++)}}, т.е. подряд 2 цикла идут.А где можно посмотреть похожий пример не подскажешь?
Ещё раз огромное спасибо.

рони 14.12.2012 14:26

Цитата:

Сообщение от dima***
for(i=0;i=a.length;i++){for(j=0;j=a.length;j++){}}

эта кострукция мало отличается от примера выше ... разве что без фигурной скобки она нерабочая

рони 14.12.2012 14:33

dima***,для вашего случая достаточно и одного цикла
var a = "Мама мыла раму.Сын пошёл учиться.Щенок весело гавкал.",
    pat = /[^.]+/g,
    reg = /\s/,
    b = a.match(pat);
for (var i = 0; i < b.length; i++) {
    b[i] = b[i].split(reg);
}
a = b;
document.write(a)

dima*** 14.12.2012 15:15

Да,отлично,спасибо!Ещё лучше стало!
Разобрался почему не получалось.
b[i] = b[i].split(reg)-вот до этой строки не додумался.

monolithed 15.12.2012 02:07

Или так:

var str = "Мама мыла раму.Сын пошёл учиться.Щенок весело гавкал.";

var result = str.split(/\./).map(function(value) {
  return value.split(/\s/);
});

alert(result);



Цитата:

Сообщение от рони
b = a.match(pat);

match может вернуть null (не в конретном случае, конечно)

kobezzza 15.12.2012 02:16

Цитата:

Сообщение от dima*** (Сообщение 221270)
Целый месяц бился.Что-то похожее делал,но в Adobe Dreamweawer не получалось.Сейчас буду разбираться,где ошибка была.

Мб нужно было включить режим "код" ?:)

рони 15.12.2012 02:25

:write: monolithed, на всякий случай ...
1.
Цитата:

Сообщение от dima***
c помощью цикла

2.str.split(/\./) даст лишний элемент массива

monolithed 15.12.2012 02:31

Цитата:

Сообщение от рони
monolithed, на всякий случай ...

Ну да, не обратил внимание на расположение точки)
Все-равно для match нужна проверка на null

Цитата:

Сообщение от рони
Цитата:

Сообщение от dima***
c помощью цикла


Видимо он других способов пока не знает :)

monolithed 15.12.2012 02:35

C учетом правок, как-то так:

var str = "Мама мыла раму.Сын пошёл учиться.Щенок весело гавкал.";

var result = str.split(/\.(?!$)/).map(function(value) {
  return value.split(/\s/);
});

alert(result);

рони 15.12.2012 02:46

monolithed,
сколько будет 2 * 2 нуда гдето так 7 -8 ...
Цитата:

Сообщение от monolithed
как-то так:

var str = "Мама мыла раму.Сын пошёл учиться.Щенок весело гавкал.";
var result = str.split(/\.(?!$)/).map(function(value) {
  return value.split(/\s/);
});

alert(result[2][2].length);

monolithed 15.12.2012 03:54

Ага, спать пора

dima*** 15.12.2012 11:02

Всем спасибо за помощь.

А как сделать:
var str = "Мама мыла раму.Сын пошёл учиться.Щенок гавкал.";
1.Разделитель точка.
2.replace(reg,'$1,$2,$3');
В "Щенок гавкал" должно получиться("Щенок,гавкал,''") .

monolithed 15.12.2012 13:11

alert("Мама мыла раму.Сын пошёл учиться.Щенок гавкал.".match(/\.(.*\.)$/)[1].split(/\./));


Для чего нужен пустой элемент в конце?

dima*** 15.12.2012 13:15

А "Мама мыла раму" не разделилась?

monolithed 15.12.2012 13:19

Цитата:

Сообщение от dima***
А "Мама мыла раму" не разделилась?

Так нужно было излагать свои мысли более четко

monolithed 15.12.2012 13:23

alert("Мама мыла раму.Сын пошёл учиться.Щенок гавкал.".match(/[^.]+/g).map(function(value) {
   return value.split(/\s/);
}));


Без последних пустых элементов, т.к. не вижу в этом здравого смысла

dima*** 15.12.2012 14:00

Цитата:

Сообщение от monolithed (Сообщение 221470)
Так нужно было излагать свои мысли более четко

Постараюсь.

Нужно с использованием replace получить массив массивов:
a=[Мама,мыла,раму]
[Сын,пошёл,учиться]
[Щенок,гавкал,'']

<script>
a="Мама мыла раму.Сын пошел учиться.Щенок гавкал.";
reg=/([А-Яа-я]+)\s([А-Яа-я]+)\s([А-Яа-я]+)\./g;
b=a.match(reg);
pat=/\./;
c=new Array;
for(i=0;i<b.length;i++){
document.write(b[i]+'<br>');
c[i]=b[i].replace(reg,'$1,-,$2,$3')
}
for(i=0;i<c.length;i++){
document.write(c[i]+'<br>');
}
</script>

dima*** 15.12.2012 14:02

monolithed,объясни пожалуйста "map(function(value)"

monolithed 15.12.2012 14:45

Цитата:

Сообщение от dima***
Нужно с использованием replace получить массив массивов

Зачем?

var str = 'Мама мыла раму.Сын пошёл учиться.Щенок гавкал.';
var result = [];

str.replace(/[^.]+/g, function(value) {
   return result.push(value.split(/\s/));
});

alert(result);


Цитата:

Сообщение от dima***
объясни пожалуйста "map(function(value)"

http://learn.javascript.ru/array-iteration#map

dima*** 15.12.2012 15:36

Да,спасибо.

dima*** 15.12.2012 18:00

Вообщем,нужно,чтобы использовалось,то что в скобках.Типа этого:
<script>
a="Мама мыла раму.Сын пошел учиться.Щенок гавкал.";
reg=/([А-Яа-я]+)\s([А-Яа-я]+)\s([А-Яа-я]+)\./g;
b=a.match(reg);
pat=/\./;
c=new Array;
for(i=0;i<b.length;i++){
document.write(b[i]+'<br>');
c[i]=b[i].replace(reg,'$1,-,$2,$3')
}
for(i=0;i<c.length;i++){
document.write(c[i]+'<br>');
}
</script>

рони 15.12.2012 18:57

dima***,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Вариант...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
  <title></title>
</head>
<body>
<script>
a="Мама мыла раму.Сын пошел учиться.Щенок гавкал.";
reg=/([А-Яа-я]+)\s([А-Яа-я]+)(\s([А-Яа-я]+))?\./g;
b=a.match(reg);
c=new Array;
for(i=0;i<b.length;i++){
document.write(b[i]+'<br>');
c[i]=b[i].replace(reg,'$1,$2,$3').split(/,/);
}
for(i=0;i<c.length;i++){
document.write(c[i]+'<br>');
}
</script>
</body>
</html>

dima*** 15.12.2012 19:54

Рони,спасибо огромное!!!Настоящий профессор!:thanks:

dima*** 16.12.2012 12:02

Опять не получается...

<!DOCTYPE HTML>
	<html>
	<head>
	<meta charset="utf-8" />
	  <title></title>
	</head>
	<body>
	<script>
	a="Мама мыла.Старший сын пошел учиться.Щенок гавкал.";
	reg=/([А-Яа-я]+)\s([А-Яа-я]+)((\s([А-Яа-я]+)\s([А-Яа-я]+))?\./g;
	b=a.match(reg);
c=new Array;
for(i=0;i<b.length;i++){
c[i]=b[i].replace(reg,'$1,-,$2,$4,$5');
c[i]=c[i].split(/,/);
for(j=0;j<c[i].length;j++){
document.write(c[i][j]+'<br>');
}
}

document.write("<table border=1>");
for (i = 0; i <с[i].length; i++)
{document.write("<tr>");
    for (j = 0; j < с[j].length; j++)
    {document.write("<td>"+с[i][j]+"</td>")}
document.write("</tr>")
}
document.write("</table>");

           </script>
	</body>
	</html>

рони 16.12.2012 13:17

dima***,
reg=/([А-Яа-я]+)\s([А-Яа-я]+)((\s([А-Яа-я]+)\s([А-Яа-я]+))?\./g лишняя скобка в регепсе
с 22 строки перепутана русская с с английской
+ вместо длины массива используется длина ячейки
с[i].length
+ желательно использовать var при обьявлении переменной
Рабочий вариант ...
<!DOCTYPE HTML>
	<html>
	<head>
	<meta charset="utf-8" />
	  <title></title>
	</head>
	<body>
    <script  type="text/javascript">
var a = "Мама мыла.Старший сын пошел учиться.Щенок гавкал.",
    reg = /([А-Яа-я]+)\s([А-Яа-я]+)(\s([А-Яа-я]+)\s([А-Яа-я]+))?\./g,
    b = a.match(reg),
    c = new Array;
for (i = 0; i < b.length; i++) {
    c[i] = b[i].replace(reg, '$1,-,$2,$4,$5');
    c[i] = c[i].split(/,/);
}
for (i = 0; i < c.length; i++) {
    document.write(c[i] + '<br>');
}
var i, j;
document.write("<table border=1>");
for (i = 0; i < c.length; i++) {
    document.write("<tr>");
    for (j = 0; j < c[i].length; j++) {
        document.write("<td>" + c[i][j] + "</td>")
    }
    document.write("</tr>")
}
document.write("</table>");
          </script>
	</body>
	</html>

P.S. может придумать иную форму обучения ?

dima*** 16.12.2012 13:58

Блин,такие тупые ошибки....

Цитата:

P.S. может придумать иную форму обучения ?
А какие будут предложения?

А и спасибо большое,конечно!


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