我正在创建一个Google Chrome用户脚本,该脚本将存储用户选择忽略的用户用户名。所有被忽略的用户都将使用HTML5 Local Storage API在本地存储。
我正在使用jQuery来帮助将用户添加到JSON数组,然后将其存储在本地。 我的问题是它总是覆盖第一个项目。
如果我添加“testuser1”,则尝试添加“testuser2”,它将存储“testuser2”的详细信息,“testuser1”将消失。
// Get users from localstorage
var ignored_users = JSON.parse(localStorage.getItem("ignore_list"));
// If NULL, prepare as JSON
if(ignored_users === null)
{
var ignored_users = {};
}
// Prep
var username = get_username_profile();
desc = prompt("Why do you want to ignore this user?");
// Add to list
add_to_list = [{
"username" : username,
"description" : desc
}];
$.extend(ignored_users, add_to_list);
localStorage["ignore_list"] = JSON.stringify(ignored_users);
// Highlight as ignored
$(".user_wrapper").css("background-color","#B40404");
答案 0 :(得分:3)
ignored_users
是一个包含数组的对象(你应该把它变成一个数组,除非你想在对象中存储额外的信息),你要覆盖它,所以你的行为是预期的,你应该做什么do检索数组,并在其上push
额外的对象:
var ignored_users = JSON.parse(localStorage.getItem('ignore_list'));
if (!ignored_users) {
ignored_users = [];
}
var username = get_username_profile();
desc = prompt("Why do you want to ignore this user?");
var add_to_list = {
"username" : username,
"description" : desc
};
ignored_users.push(add_to_list);
localStorage['ignore_list'] = JSON.stringify(ignored_users);
<子> PS:没有对重复忽略的用户进行检查,你应该这样做:)
答案 1 :(得分:0)
$.extend
适用于对象。将它与数组一起使用是没有意义的。要“扩展”数组,请使用.concat
。在你的情况下,使用.push
可能更有意义 - 你不需要在数组中包装你正在创建的对象。