2013-07-04 1 views
0

Я создаю пользовательский скрипт Google Chrome, в котором будут храниться имена пользователей пользователей, которые пользователь выбрал для игнорирования. Все проигнорированные пользователи будут храниться локально с использованием API локального хранилища HTML5.jQuery extend overwrites part of array

Я использую 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

Как выглядит «ignord_users» изначально? –

+0

[{ \t "username": "test_user1", \t "desc": false }]; –

+0

Почему бы вам просто не игнорировать_users.push()? –

ответ

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: никаких проверок не делается для дублирующих игнорировали пользователей, вероятно, вы должны сделать это :)

+0

Отлично! Спасибо! –

+0

@ Мики, нет проблем :) – epoch

0

$.extend для объектов. Не имеет смысла использовать его с массивами. Чтобы «расширить» массив, используйте .concat. В вашем случае, вероятно, имеет смысл использовать .push, но вам не нужно обертывать объект, который вы создаете в массиве.