Javascript.RU

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

убрать 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>
Ответить с цитированием
  #2 (permalink)  
Старый 02.03.2014, 16:12
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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

var write = (i+1+".  "+k[i]+'<br>').replace('undefined', '');
document.write(write);
Ответить с цитированием
  #3 (permalink)  
Старый 02.03.2014, 16:33
Профессор
Отправить личное сообщение для dima*** Посмотреть профиль Найти все сообщения от dima***
 
Регистрация: 13.12.2012
Сообщений: 283

Ага,спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 03.03.2014, 01:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от dima***
Ага,спасибо!
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 03.03.2014, 05:03
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

danik.js, главное чтобы работало
Ответить с цитированием
  #6 (permalink)  
Старый 03.03.2014, 05:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

Сообщение от dima***
function unique
Че за муть в этой функции? Откуда у тебя квадратная матрица? У тебя вложенные массивы идут с двумя (иногда одним) элементами. А j у тебя зашкаливает почти всегда. Вот тебе и undefined.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 03.03.2014, 05:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Вобще я бы не стал делать на регулярках. Нужно писать парсер
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 03.03.2014, 08:32
Профессор
Отправить личное сообщение для dima*** Посмотреть профиль Найти все сообщения от dima***
 
Регистрация: 13.12.2012
Сообщений: 283

Сообщение от danik.js
Вобще я бы не стал делать на регулярках. Нужно писать парсер
Это,я даже не знаю,что такое.Так,что не вариант.

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

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

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

Последний раз редактировалось dima***, 03.03.2014 в 08:55.
Ответить с цитированием
  #9 (permalink)  
Старый 03.03.2014, 08:51
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я писал про код в целом, а не про unique.
А твой новый вариант unique неправильный, так как у тебя же массив массивов, а не массив строк. Сечешь?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 03.03.2014, 09:01
Профессор
Отправить личное сообщение для dima*** Посмотреть профиль Найти все сообщения от dima***
 
Регистрация: 13.12.2012
Сообщений: 283

Сообщение от danik.js
Я писал про код в целом, а не про unique.
А где в коде совсем уж страшно?Просто ткнуть на грубые ошибки.
Сообщение от danik.js
А твой новый вариант unique неправильный, так как у тебя же массив массивов, а не массив строк. Сечешь?
Ну,да поэтому и cделал unique с j.

Последний раз редактировалось dima***, 03.03.2014 в 09:04.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как побить undefined ? Jnas Общие вопросы Javascript 0 30.10.2012 10:19
Странности undefined в IE7 и JSON Viper jQuery 6 14.03.2012 13:53
Google Chrome: GET http://url/url undefined (undefined) Kirumbik Opera, Safari и др. 0 07.05.2011 23:26
Чем отличается undefined от null hrundel Общие вопросы Javascript 21 01.01.2011 22:06