2013-07-04 1 views
1

J'ai créé un script pour ajouter des personnes à une liste d'ignorés, mais une fois que je les ai ajoutées, il y a un problème avec leur suppression. Si je supprime un utilisateur du tableau, je peux toujours ajouter des utilisateurs à la liste des ignorés. Si je supprime les deux personnes de la liste des ignorés, je ne peux plus en ajouter. J'ai l'impression que c'est parce que "ignored_users" n'est plus un tableau?jQuery conserve un tableau, même lorsque la valeur est nulle

j'ajouter des personnes à la liste des ignorés en utilisant ce code: {tous vars sont définis, et les travaux}

add_to_list = { 
    "username" : username, 
    "date_added" : "\"" + day + "/" + month + "/" + year + "\"", 
    "description" : desc 
}; 
ignored_users.push(add_to_list); 
localStorage["ignore_list"] = JSON.stringify(ignored_users); 

Le tableau commence ressembler à ceci:

ignored_users = [{"username":"test1","date_added":"\"4/7/2013\"","description":""},{"username":"test2","date_added":"\"4/7/2013\"","description":""}] 

Le supprimer à partir du code de tableau ressemble à ceci:

$.each(ignored_users, function(i, person) { 
    if(person.username === username) 
    { 
     delete ignored_users[i]; 
     localStorage["ignore_list"] = JSON.stringify(ignored_users); 
    } 
} 
+0

Comment les ajoutez-vous? – mishik

+0

add_to_list = { \t \t \t \t \t "nom d'utilisateur": nom d'utilisateur, \t \t \t \t \t "DATE_ADDED": "\" "+ jour + "/" + mois + "/" + année + "\"", \t \t \t \t \t "Description": desc \t \t \t \t}; \t \t \t \t ignored_users.push (add_to_list); \t \t \t \t localStorage ["ignore_list"] = JSON.stringify (ignored_users); –

+0

pourquoi échappez-vous à ces guillemets? – Alnitak

Répondre

1

Utilisez une boucle native et splice à la place. La suppression d'un élément d'un tableau que vous itérez a causé des problèmes pour moi lors de l'utilisation each dans le passé. Essayez ceci:

ignored_users = [{ 
    "username": "test1", 
    "date_added": "\"4/7/2013\"", 
    "description": "" 
}, { 
    "username": "test2", 
    "date_added": "\"4/7/2013\"", 
    "description": "" 
}] 

var username = "test1"; 
for (var i = 0; i < ignored_users.length; i++) { 
    if (ignored_users[i].username === username) { 
     ignored_users.splice(i, 1); 
     localStorage["ignore_list"] = JSON.stringify(ignored_users); 
    } 
} 

Example fiddle

+0

Parfait, je vais cocher ça quand ça me le permet aussi! :RÉ –

0

delete ignored_users[i]; ne fera pas réellement ce que vous voulez, il fera un élément #i non défini, mais ne reculera pas devant un tableau.

Vous devez utiliser la méthode splice(). Pour supprimer #i élément de tableau:

array.splice(i, 1) 
0

Vous utilisez delete pour supprimer l'élément du tableau, mais cela ne mettez pas à jour les index du tableau, il a mis à l'index undefined vous supprimez. Ainsi, lorsque vous réexécuterez votre code, person ne sera pas défini. Essayez avec:

$.each(ignored_users, function(i, person) { 
    if(person && person.username === username) 
    { 
     delete ignored_users[i]; 
     localStorage["ignore_list"] = JSON.stringify(ignored_users); 
    } 
} 

vous pouvez également voir d'autres formes de supprimer un élément d'un tableau here.

Questions connexes