2016-12-21 4 views
3

Я создаю приложение React, которое вы пишете в названии рецепта и ингредиентах, и они будут отображаться в виде списка на странице для каждого созданного рецепта. Я собирался использовать .map для создания элементов списка, но мне нужен массив для работы с ним, а localStorage - это не массив (я считаю, что так или иначе). Будет ли способ переносить каждый ключ в localStorage на массив?Как перебирать значения localStorage

LocalStorage, каждый раз, когда вы нажимаете кнопку «добавить рецепт», добавляется ключ «имя рецепта» плюс номер для заказа. Значение - это сам рецепт. Я просто хочу добавить рецепты в массив, а также для .map.

+0

Post некоторые подробности, 'localStorage' структуру и ожидаемый массив. – dfsq

+0

'localStorage' является объектом, если вы храните что-либо внутри, поскольку массив просто выполняет' localStorage.yourArray.map' –

+1

Возможный дубликат: http://stackoverflow.com/questions/2010892/storing-objects-in-html5-localstorage – Gerrit0

ответ

3

Попробуйте использовать Object.keys(localStorage). Как вы запросили ключ:

var arrayOfKeys = Object.keys(localStorage); 

Легко, как это! Это возвращает массив ключей. Теперь, если вы хотите, чтобы значения:

var arrayOfValues = Object.values(localStorage); 

Он возвращает массив.

Обратите внимание, что Object.values является экспериментальным, поэтому альтернатива будет:

var arrayOfValues = []; 
for(var i in localStorage){ 
    if(localStorage.hasOwnProperty(i)){ 
     arrayOfValues.push(localStorage[i]); 
    } 
} 
+0

Это сработало отлично! Простой и эффективный. Большое спасибо. – jeff64

+0

Добро пожаловать! Помните, что 'Object.values' является экспериментальным. – MasterBob

0

Вы можете использовать localStorage.length, это даст общее количество ключей, присутствующее в localStorage. Перебор с помощью этой длины и использовать localStorage.key(index), чтобы получить имя ключа, например:

for (let i = 0; i < localStorage.length; i++)   
    let key = localStorage.key(i); 
    console.log(localStorage.getItem(key)); 
} 
+0

Это отличный ответ. – jeff64

Смежные вопросы