Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Непонятки с масивом. (https://javascript.ru/forum/misc/40235-neponyatki-s-masivom.html)

koeshiro 29.07.2013 10:38

Непонятки с масивом.
 
Есть такой код.
newdata="";
function datadelt(d){
	localdata='Masha^Sasha^Dasha^Vania^|Shishken^Dekterov^Ivanov^Barankov^|';
	localfundata=localdata.split('^|');
	num=localfundata.length;
	data=[];
	i=0;
	while(i<num){
	data.push(localfundata[i].split('^'));
	i++;
	}
	delete data[d];
	num=localfundata.length;
	newlocaldata='';
	i=0;
	while(i<num){
	newlocaldata+=data[i];
	i++;
	}
	newdata=newlocaldata.replace(/\bundefined\b/g ,' ');
	alert(newdata);
	}
datadelt(0);
Который должен сначало разбивать строку на один массив потом ещё на один. Тем самым получаем ммм двойной массив или двумерный. . . . Короче говоря после его первая часть то есть текст Masha Sasha Dasha Vania должны быть удалены, а текст underfined который остаёться так же должен быть выкинут из строки. Но происходит каким-то неведомым мне способом (Похоже я совсем того) что мне IE выдаёт следующий результат: Masha Sasha Shishken Dekterov underfined ну по всей логике даже если удаляються первые элементы из обоих массивов почему это остаёться а то что идёт заними удаляеться? Так вроде чуть чуть пофиксил сам но всё равно теперь выдаёт:
underfined Shishken Dekterov Ivanov Barankov. Как избавиться от underfined.
Полный код. Так же не доработаный. . . .
/*Вывод*/
function remlocaldata(){
	localdata=localStorage.getItem('LF');
	localfundata=localdata.split('^|');
	num=localfundata.length;
	newdata=[];
	i=0;
	while(i<num){
	newdata.push(localfundata[i].split('^'));i++;
	}
	n=0;
	while(n<num){
	url=newdata[n][0];
	title=newdata[n][1];
	html='<div id="aclick'+n+'"><a href="'+url+'">'+title+'</a> <div onclick="datadelt('+n+')"><br />Удалить '+title+'<br /> <br /></div></div>';
	document.write(html);
	if(url==null&&title==null){a='aclick'+n+'';document.getElementById(a).parentNode.removeChild(document.getElementById(a));}n++;}
	}
/*--------*/
/*Сохранение*/	
	function save(){
	localdata=localStorage.getItem('LF');
	if(localdata==null){
	localdata=''+MyUrl+'^'+MyTitle'^|';
	}
	else{
	MyUrl=location.href;
	MyTititle=document.title;
	localdata+=''+MyUrl+'^'+MyTitle'^|';}
	localStorage.setItem('LF',localdata);
	}
/*--------*/
/*Удаление*/
	function datadelt(d){
	localdata=localStorage.getItem('LF');
	localfundata=localdata.split('^|');
	num=localfundata.length;
	data=[];
	i=0;
	while(i<num){
	data.push(localfundata[i].split('^'));i++;
	}
	delete newdata[d];
	newlocaldata='';
	i=0;
	while(i<num){
	newlocaldata+=data[i][0];
	newlocaldata+=data[i][1];i++;
	}
	newlocaldata=newlocaldata.replace(/\bundefined\b/g ,'');
	localStorage.setItem('LF',newlocaldata);
	a='aclick'+n+'';document.getElementById(a).parentNode.removeChild(document.getElementById(a);
	}
/*-----------*/

рони 29.07.2013 10:49

koeshiro,
Удаление из массива
pop shift splice

koeshiro 29.07.2013 11:22

Вот именно что pop shift splice не подходят. Ибо нужно будет удалять из центра массива не трогая его других частей. А от underfined нужно избавиться из строки его нужно выкорчить. . . .

рони 29.07.2013 11:39

Цитата:

Сообщение от koeshiro
pop shift splice не подходят

по моему вы страдаите фигнёй
newdata="";
function datadelt(){
	localdata='Masha^Sasha^Dasha^Vania^|Shishken^Dekterov^Ivanov^Barankov^|';
	newdata=localdata.split('^|')[1].split('^').join(' ');
	alert(newdata);
	}
datadelt();

koeshiro 29.07.2013 12:35

рони,
Нет просто ещё много не знаю. .join(' ');
Вот из за этой маленькой команды можно было не делать цикл? Но всё равно underfined ведь не куда не дениться как с ним быть?

рони 29.07.2013 13:09

Цитата:

Сообщение от koeshiro
Но всё равно underfined ведь не куда не дениться как с ним быть?

моя твоя непонимать где underfined?

koeshiro 29.07.2013 13:19

рони,
посли delet data[0]; остаёться underfined http://learn.javascript.ru/array-met...массива

рони 29.07.2013 13:31

Цитата:

Сообщение от koeshiro
посли delet data[0]; остаёться underfined

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

koeshiro 29.07.2013 13:40

newlocaldata=newlocaldata.replace(/\bundefined\b/g ,'');
Не сработало. Вы человек умный. Можете помочь? Я честное слово искал и ищу но если вы поможете буду вам благодарен =)

рони 29.07.2013 13:56

koeshiro,
что вам нужно получить функцией datadelt -- чем вас неустроил вариант из 4 поста

koeshiro 29.07.2013 14:53

Что получить? Взять данные из локального хранилища. Удалить не нужные данные выбраные пользователем сохранить оставшиеся данные.

рони 29.07.2013 15:10

Цитата:

Сообщение от koeshiro
Что получить?

массив или строку?
проблему с underfined я вам решил в 4 посте осталось понять что вам нужно.

koeshiro 29.07.2013 15:35

А да. . . Он не подходит только потому что будет сложно создавать элеенты имея всего один массив не имея двумерного массива. НУ или покрайней мере мне так кажеться. . . . Но я поработаю над этим спасибо =) Жаль плюсик вам не могу поставить.

рони 29.07.2013 15:56

Цитата:

Сообщение от koeshiro
Он не подходит только потому что будет сложно создавать элеенты имея всего один массив не имея двумерного массива

эх переводчика бы ))) понять бы про какие массивы вы говорите

koeshiro 30.07.2013 13:24

рони,
ну скажу вам так. Я решил сделать модуль "мои закладки или моё избраное" на базе локального хранилища. И решил задать скрипту ммм следующие действия. Сохранение---если локальное хранилище пустое---хохраняем туда титл страницы на которой находимся и её url если локальное хранилище не пусто --- берём даные из локального хранилища добавляем туда титл и url и снова сохраняем под тем же именем. Вывод даных--- получаем даные из локального хранилища --- разбиваем на массивы ---- узнаём их количество --- снова разбиваем на массивы для получения двумерных массивов то есть data[n][0] и data[n][1] в которых храняться титл и url и с этими даными создаём html строку и выводим её.
Удаление --- берём номер из события onclick дива с надписью удалить вызываем даные из локального хранилища превращаем в массив и удаляем не нужную его часть. после снова превращаем в строку и сохраняем в локальное хранилище.

koeshiro 30.07.2013 13:38

Короче говоря получилось теперь вот так.
/*Сохранение*/	
	function save(){
	localdata=localStorage.getItem('LF');
	if(localdata==null){
	MyUrl=location.href;
	MyTitle=document.title;
	newlocaldata='';
	newlocaldata+=MyUrl;
	newlocaldata+='^';
	newlocaldata+=MyTitle;
	newlocaldata+='^';
	newlocalStorage.setItem('LF',newlocaldata);alert('true')}
	else{
	MyUrl=location.href;
	MyTitle=document.title;
	newlocaldata=localdata;
	newlocaldata+=MyUrl;
	newlocaldata+='^';
	newlocaldata+=MyTitle;
	newlocaldata+='^';
	localStorage.setItem('LF',newlocaldata);alert('false')}}
/*--------*/
/*Вывод*/
function remlocaldata(){
	localdata=localStorage.getItem('LF');
	data=localdata.split('^');
	num=data.length;n=0;
	while(n<num-1){
	url=data[n];
	n++;
	title=data[n];
	html='<div id="aclick'+n+'"><a href="'+url+'">'+title+'</a> <div onclick="datadelt('+n+')"><br />Удалить '+title+'<br /> <br /></div></div>';
	document.write(html);
	n++;}
	}
/*--------*/
/*Удаление*/
	function datadelt(d){
	localdata=localStorage.getItem('LF');
	data=localdata.split('^');
	delete data[d];
	delete data[d+1];
	newlocaldata=data.join('^');
	localStorage.setItem('LF',newlocaldata);
	a='aclick'+d+'';document.getElementById(a).parentNode.removeChild(document.getElementById(a));
	}
/*-----------*/save();remlocaldata();
Но что-то снова не так. . . .

рони 30.07.2013 13:46

koeshiro,
ок алгоритм понятен теперь снова да ладом --
var str = 'значение' ; было
var data = [значение]; стало
чего то удалили новая
data = [значение]; заполните хотябы один образец для примера.

koeshiro 30.07.2013 13:58

да да . . . Дело по большей мере в моей не внимательности . . . там название не такое. . . тут не сохранил. . .

koeshiro 30.07.2013 13:59

Это я поправил. . . . Но теперь проблема в другом. После удаления остаёться пробел! То есть пустое место после обнавления страницы. Где написано просто удалить.

рони 30.07.2013 14:48

koeshiro,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<script>
 /*Сохранение*/
	function save(){
	localdata=localStorage.getItem('LF');
	if(!localdata){
	MyUrl=location.href;
	MyTitle=document.title;
	var newlocaldata='';
	newlocaldata+=MyUrl;
	newlocaldata+='^';
	newlocaldata+=MyTitle;
	//newlocaldata+='^';
	localStorage.setItem('LF',newlocaldata)}
	else{
	MyUrl=location.href;
	MyTitle=document.title;
	newlocaldata=localdata;
    newlocaldata+='^';
    newlocaldata+=MyUrl;
	newlocaldata+='^';
	newlocaldata+=MyTitle;
	localStorage.setItem('LF',newlocaldata)};

    }
/*--------*/
/*Вывод*/
function remlocaldata(){
	localdata=localStorage.getItem('LF');
	data=localdata.split('^');
	num=data.length;n=0;
	while(n<num-1){
	url=data[n];
	n++;
	title=data[n];
	html='<div id="aclick'+n+'"><a href="'+url+'">'+title+'</a> <div onclick="datadelt('+n+')"><br />Удалить '+title+'<br /> <br /></div></div>';
	document.write(html);
	n++;}
	}
/*--------*/
/*Удаление*/
	function datadelt(d){
	localdata=localStorage.getItem('LF');
	data=localdata.split('^'); alert('data до удаления: ' + data)
	data.splice( d-1,2);   alert('data после удаления: ' + data);
	newlocaldata=data.join('^');
	localStorage.setItem('LF',newlocaldata);
	a='aclick'+d+'';document.getElementById(a).parentNode.removeChild(document.getElementById(a));
	}
/*-----------*/save();remlocaldata();

</script>
</body>

</html>

koeshiro 30.07.2013 15:14

Мда. . . а я об этом методе нислухом ни духом. . .

koeshiro 30.07.2013 15:16

Спасибо вам =) Жаль плюсик добавить нельзя =)


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