Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как получить копию localStorage? (https://javascript.ru/forum/misc/73314-kak-poluchit-kopiyu-localstorage.html)

geekvar 05.04.2018 13:49

Как получить копию localStorage?
 
Собственно это и есть вопрос который сейчас меня интересует.
Собираюсь в юзерскрипте вызывать значения из массива localStorage, с последующим удалением этого значения. До тех пор пока длина массива не будет равна 0.
Проблема лишь в том что этот массив в localStorage, будет нужен мне и в дальнейшем, а действия выше удалят из него все значения.

рони 05.04.2018 13:52

geekvar,
:-?

j0hnik 05.04.2018 13:55

var copy = localStorage;

j0hnik 05.04.2018 13:57

geekvar,
только вот зачем вам что-то удалять если вам это еще нужно, просто циклом пройдитесь, сделайте свои черные дела.

sortarray 05.04.2018 14:05

Не знаю как правильно, но он перебирается как обычный объект

<html>
<head>
<meta charset = "utf-8" />
<style>
</style>
</head>

<body>

<script>


localStorage.setItem("foo", 1)
localStorage.setItem("bar", 1)
localStorage.setItem("baz", 1)

myCopy = {}

for(var i in localStorage){
   if(!localStorage.hasOwnProperty(i)) break
   myCopy[i] = localStorage[i]
}
console.log(myCopy)

</script>

</body>
</html>

sortarray 05.04.2018 14:07

Цитата:

Сообщение от j0hnik (Сообщение 482410)
var copy = localStorage;

Это не копия, ссылка на тот же объект.
Или именно это и нужно ТСу?

Malleys 05.04.2018 14:08

localStorage.setItem("foo", 1)
localStorage.setItem("bar", 1)
localStorage.setItem("baz", 1)
 
myCopy = JSON.parse(JSON.stringify(localStorage));

console.log(myCopy);

sortarray 05.04.2018 14:16

Malleys,
Это тоже не копия, оно уничтожит информацию о типах

Nexus 05.04.2018 14:18

sortarray, разве в localStorage пишется что-то кроме строк?

j0hnik 05.04.2018 14:18

Цитата:

Сообщение от sortarray (Сообщение 482418)
Это не копия, ссылка на тот же объект.

Все верно, ссылка

Malleys 05.04.2018 14:22

localStorage так и так уничтожает инфо о типах, поскольку приводит назначенные ключи к строковому предствлению

localStorage.re = /a/gi;
alert(localStorage.re.constructor.name); // String, а не RegExp

Malleys 05.04.2018 14:25

Ещё придумал способ скопировать localStorage

myCopy = Object.assign({}, localStorage);
console.log(myCopy);

laimas 05.04.2018 14:27

Цитата:

Сообщение от Malleys
Object.assign({}, localStorage);

Удобно, но ишак не поддерживает.

sortarray 05.04.2018 14:28

Да, Вы правы, похоже, приведения к строкам происходят через setItem, там все хранится в строках

geekvar 05.04.2018 19:25

j0hnik, в цикле пройти не получится, т.к. в localStorage хранятся определенные значения, которые подставляются к концу ссылки, и происходит переход по этой новой ссылке. Н-р: сайт.ру/профиль.php?игрок=значение
Поэтому чтобы исключить "зацикливание" юзерскрипта на одной странице, единственное что пришло мне в голову удалить использованное значение из localStorage.

localStorage.setItem('activePL', JSON.stringify(data));


В браузере нашел созданный localStorage с ключем activePL. Теоретически единственное что осталось, чтобы все заработало, это скопировать localStorage выше с новым ключем н-р copeActivePL.

j0hnik 05.04.2018 19:36

geekvar,
Так сохраните отдельный ключ в том же localStorage и модифицируйте его как вам нужно.

geekvar 05.04.2018 20:06

Все, наконец получилось включить мозги. Спасибо за ответы!

Malleys 04.08.2018 07:28

Цитата:

Сообщение от Malleys (Сообщение 482426)
способ скопировать localStorage


Недавно вышло 9-ое издание спецификации ECMAScript, в котором описан оператор расширения объекта.
myCopy = { ...localStorage };
console.log(myCopy);


Часовой пояс GMT +3, время: 08:11.