У меня есть набор сохраняемых элементов, но я пытаюсь изменить значение после его извлечения и до того, как передать его своей функции php. Можно ли поменять только один элемент?

Моя цепочка предметов выглядит так:

var args = window.localStorage.getItem("localusers");

start=0&type=1

Я сохраняю элемент localusers так:

window.localStorage.setItem('localusers', $("#profile_form_id").serialize());

Я пытаюсь установить значение типа на 6

Я не могу найти поддерживаемый метод, который позволяет мне получить / установить элемент в массиве, поэтому мне нужно выполнить итерацию по массиву, изменить значение, а затем снова установить элемент localusers? Это кажется не очень эффективным, но я не вижу другого пути.

Есть мысли или предложения?

3
Paul 26 Авг 2011 в 19:48

2 ответа

Лучший ответ

localstorage не возвращает массив или объект. Он может хранить только строку.

Люди обходят это стороной: JSON.stringify() массив / объект перед передачей в setItem. Затем, извлекая его с помощью getItem(), вы запускаете JSON.parse() на нем.

Предполагая, что это объект, и вы его проанализировали, вы можете изменить свою переменную args, прежде чем отправлять ее:

args.type = 6;

Чтобы облегчить все это, вы можете позвонить маленькому помощнику:

var localstorage = {
    set: function (key, value) {
        window.localStorage.setItem( key, JSON.stringify(value) );
    },
    get: function (key) {
        try {
            return JSON.parse( window.localStorage.getItem(key) );
        } catch (e) {
            return null;
        }
    }
};

Если вы включите этот сценарий, вы сможете затем устанавливать и получать элементы через localstorage.get и localstorage.set, и он автоматически преобразует их в JSON и из него.

7
Joseph Silber 9 Июл 2013 в 01:06

Попробуй это

var args = window.localStorage.getItem("localusers");
args["type"] = 6;

//Update the localStorage with new value
localStorage.setItem("localusers", JSON.stringify(args));

Как и другие объекты JavaScript, вы можете рассматривать объект localStorage как ассоциативный массив. Вместо использования методов getItem() и setItem() вы можете просто использовать квадратные скобки.

var args = localStorage["localusers"];
args["type"] = 6;

//Update the localStorage with new value
localStorage["localusers"] = args;
1
ShankarSangoli 31 Авг 2011 в 16:23