0

我正在创建一个 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");
4

2 回答 2

3

ignored_users是一个包含数组的对象(您应该将其设为数组,除非您想在对象中存储额外信息),您正在覆盖它,因此您的行为是预期的,您应该做的是检索数组,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:不检查重复的忽略用户,你应该这样做:)

于 2013-07-04T13:42:53.447 回答
0

$.extend用于对象。将它与数组一起使用是没有意义的。要“扩展”数组,请使用.concat. 但是,在您的情况下,使用它可能更有意义.push- 您不需要将要创建的对象包装在数组中。

于 2013-07-04T13:48:08.440 回答