Вход

Просмотр полной версии : Непонятки с масивом.


koeshiro
29.07.2013, 10:38
Есть такой код.newdata="";
function datadelt(d){
localdata='Masha^Sasha^Dasha^Vania^|Shishken^Dekte rov^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.getElementBy Id(a).parentNode.removeChild(document.getElementBy Id(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).parentN ode.removeChild(document.getElementById(a);
}
/*-----------*/

рони
29.07.2013, 10:49
koeshiro,
Удаление из массива (http://learn.javascript.ru/array-methods#удаление-из-массива)
pop shift splice

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

рони
29.07.2013, 11:39
pop shift splice не подходят
по моему вы страдаите фигнёй
newdata="";
function datadelt(){
localdata='Masha^Sasha^Dasha^Vania^|Shishken^Dekte rov^Ivanov^Barankov^|';
newdata=localdata.split('^|')[1].split('^').join(' ');
alert(newdata);
}
datadelt();

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

рони
29.07.2013, 13:09
Но всё равно underfined ведь не куда не дениться как с ним быть?
моя твоя непонимать где underfined?

koeshiro
29.07.2013, 13:19
рони,
посли delet data[0]; остаёться underfined http://learn.javascript.ru/array-methods#удаление-из-массива

рони
29.07.2013, 13:31
посли 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
Что получить?
массив или строку?
проблему с underfined я вам решил в 4 посте осталось понять что вам нужно.

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

рони
29.07.2013, 15:56
Он не подходит только потому что будет сложно создавать элеенты имея всего один массив не имея двумерного массива
эх переводчика бы ))) понять бы про какие массивы вы говорите

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('fal se')}}
/*--------*/
/*Вывод*/
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).parentN ode.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).parentN ode.removeChild(document.getElementById(a));
}
/*-----------*/save();remlocaldata();

</script>
</body>

</html>

koeshiro
30.07.2013, 15:14
Мда. . . а я об этом методе нислухом ни духом. . .

koeshiro
30.07.2013, 15:16
Спасибо вам =) Жаль плюсик добавить нельзя =)