Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   убрать undefined (https://javascript.ru/forum/misc/45471-ubrat-undefined.html)

dima*** 02.03.2014 15:34

убрать undefined
 
Подскажите,пожалуйста!
Откуда взялся undefined в 3 строке и как от него избавиться?

<html>
<head>
<title>Документ без названия</title>
<meta charset="utf-8">
</head>
<body>
<p style ='display:none'>
I тур
26 апреля 2013 г.
1. Круглолесское - Средний              перенос
27 апреля 2013 г.
2. Ветераны футбола - Саблинское    на КДК
3. Новокавказский - АСХК                   3-0
26 апреля 2013 г.
4. Ал. ДЮСШ - Калиновское                 7-2

II тур
3 мая 2013 г.
1. Средний - Калиновское                    4-1
2. Новокавказский - Ал. ДЮСШ             4-4
3. АСХК - Саблинское                          4-8
4. Круглолесское - Ветераны футбола   0-3

III тур
8 мая 2013 г.
1. Ветераны футбола - Средний           4-2
22 мая 2013 г.
2. АСХК - Круглолесское (зап. поле)
3. Саблинское- Ал. ДЮСШ (ос.поле)
8 мая 2013 г.
4. Калиновское - Новокавказский        0-9


</p>

<script>

var a=document.getElementsByTagName('p')[0].innerHTML;
a=a.replace(/^\s*?\n+\s*|\s*?\n\s*$/img,'').split(/\s*\n\s*/).join('\n');

reg0=/[IVX]+\s*тур/img;
//reg0=/^(^тур)тур/img;
reg1=/\d+\s*[а-я]+\s*\d*\s*г\./img;
reg2=/\d+\.\s(.+)\s\-\s(.*?)\s{2,}(\d\-\d|[а-я]+)/img;

b=a.replace(reg2,'$1,$2,$3').replace(/(\d)\-(\d)/img,'$1,$2');
b=b.split(/\n/).join('<br>');

c=b.split(reg0).join(',');//Удаляем "тур"
c=c.split(reg1).join(',');//Удаляем "дата"
c=c.split('<br>');


d=[];//Удаляем "запятые"
for (var i=0; i<c.length; i++) {
if(c[i]!=',') {
  d.push(c[i])
}}


for (var i=0; i<d.length; i++) {
d[i]=d[i].split(',',2);

}



function unique(arr) {
  var obj = {};
  for(var i=0; i<arr.length; i++) {
for(var j=0; j<arr.length; j++) {
    var str = arr[i][j];
    obj[str] = true; // запомнить строку в виде свойства объекта
  }}
  return Object.keys(obj); // или собрать ключи перебором для IE<9

}

k=unique(d);

for (var i=0; i<k.length; i++) {

document.write(i+1+".  "+k[i]+'<br>');
console.log(i+1+".  "+k[i]+'<br>');
}
</script>
</body>
</html>

ruslan_mart 02.03.2014 16:12

Что-то мне так лень в этом коде разбираться :D

var write = (i+1+".  "+k[i]+'<br>').replace('undefined', '');
document.write(write);

dima*** 02.03.2014 16:33

Ага,спасибо!

danik.js 03.03.2014 01:15

Цитата:

Сообщение от dima***
Ага,спасибо!

:lol:

ruslan_mart 03.03.2014 05:03

danik.js, главное чтобы работало :D

danik.js 03.03.2014 05:26

Цитата:

Сообщение от Ruslan_xDD
главное чтобы работало

Согласен. В таком коде подругому и не получится. Он не поддерживаемый. В дальнейшем просто будет дальше обрастать костылями.

Цитата:

Сообщение от dima***
function unique

Че за муть в этой функции? Откуда у тебя квадратная матрица? У тебя вложенные массивы идут с двумя (иногда одним) элементами. А j у тебя зашкаливает почти всегда. Вот тебе и undefined.

danik.js 03.03.2014 05:26

Вобще я бы не стал делать на регулярках. Нужно писать парсер

dima*** 03.03.2014 08:32

Цитата:

Сообщение от danik.js
Вобще я бы не стал делать на регулярках. Нужно писать парсер

Это,я даже не знаю,что такое.Так,что не вариант.

Цитата:

Сообщение от danik.js
Согласен. В таком коде подругому и не получится. Он не поддерживаемый. В дальнейшем просто будет дальше обрастать костылями.

Сообщение от dima***
function unique
Че за муть в этой функции? Откуда у тебя квадратная матрица? У тебя вложенные массивы идут с двумя (иногда одним) элементами. А j у тебя зашкаливает почти всегда. Вот тебе и undefined.

Совсем страшный код?:blink:
Даже если переделать на:
function unique(arr) {
var obj = {};
for(var i=0; i<arr.length; i++) {
var str = arr[i];
obj[str] = true; // запомнить строку в виде свойства объекта
}
return Object.keys(obj); // или собрать ключи перебором для IE<9
}

он всё равно будет неподдерживаемым?Ещё где "костыли"?Что ещё лучше переделать.
Спасибо за критику.

danik.js 03.03.2014 08:51

Я писал про код в целом, а не про unique.
А твой новый вариант unique неправильный, так как у тебя же массив массивов, а не массив строк. Сечешь?

dima*** 03.03.2014 09:01

Цитата:

Сообщение от danik.js
Я писал про код в целом, а не про unique.

А где в коде совсем уж страшно?Просто ткнуть на грубые ошибки.
Цитата:

Сообщение от danik.js
А твой новый вариант unique неправильный, так как у тебя же массив массивов, а не массив строк. Сечешь?

Ну,да поэтому и cделал unique с j.


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