2013-07-19 27 views
17

Tôi muốn hiển thị tất cả các khóa và bộ nhớ được ghi trước đây. Mã của tôi ở bên dưới. Tôi đã tạo ra một hàm (allStorage) nhưng nó không hoạt động. Tôi có thể làm như thế nào?Tất cả các mục lưu trữ cục bộ

function storeUserScribble(id) { 
     var scribble = document.getElementById('scribble').innerHTML; 
     localStorage.setItem('userScribble',scribble); 
    } 

    function getUserScribble() { 
     if (localStorage.getItem('userScribble')) { 
      var scribble = localStorage.getItem('userScribble'); 
     } 
     else { 
      var scribble = 'You can scribble directly on this sticky... and I will also remember your message the next time you visit my blog!'; 
     } 
     document.getElementById('scribble').innerHTML = scribble; 
    } 

    function clearLocal() { 
     localStorage.clear(); 
     return false; 
    } 

    function allStorage() { 
     var archive = []; 
     for (var i = 0; i<localStorage.length; i++) { 
      archive[i] = localStorage.getItem(localStorage.key(i)); 
     } 
    } 
+3

'length' được viết là' lenght' trong mã của bạn. FYI. – tymeJV

Trả lời

27

Nếu bạn sửa đổi chức năng của bạn để điều này, bạn có thể liệt kê tất cả các mục dựa trên chính (sẽ liệt kê chỉ mục):

function allStorage() { 

    var values = [], 
     keys = Object.keys(localStorage), 
     i = keys.length; 

    while (i--) { 
     values.push(localStorage.getItem(keys[i])); 
    } 

    return values; 
} 

Object.keys là một bổ sung mới vào JavaScript (ECMAScript 5). Nó liệt kê tất cả các khóa riêng trên một đối tượng nhanh hơn sử dụng vòng lặp for-in, đây là tùy chọn cho điều này.

Tuy nhiên, điều này sẽ không hiển thị khóa. Đối với điều đó, bạn cần trả về một đối tượng thay vì mảng (IMO ít điểm hơn vì điều này sẽ mang lại cho bạn khoảng cách trước với localStorage chỉ với một đối tượng khác) -

function allStorage() { 

    var archive = {}, // Notice change here 
     keys = Object.keys(localStorage), 
     i = keys.length; 

    while (i--) { 
     archive[ keys[i] ] = localStorage.getItem(keys[i]); 
    } 

    return archive; 
} 

Nếu bạn muốn có một định dạng nhỏ gọn niêm yết sau đó làm điều này thay vì - đây từng hạng mục trong mảng sẽ có key=item mà bạn sau này có thể chia thành từng cặp và vân vân:

function allStorage() { 

    var archive = [], 
     keys = Object.keys(localStorage), 
     i = 0, key; 

    for (; key = keys[i]; i++) { 
     archive.push(key + '=' + localStorage.getItem(key)); 
    } 

    return archive; 
} 
+1

Tốt, không biết về 'Object.keys', +1 – tymeJV

11

localStorage không phải là mảng mà là một đối tượng, vì vậy hãy thử sth. như thế này:

for (var a in localStorage) { 
    console.log(a, ' = ', localStorage[a]); 
} 
+0

Điều đó cũng sẽ liệt kê các chức năng. – Nux

+0

@Nux nó không cho tôi – tborychowski

+0

Lạ ... Dường như chỉ là một vấn đề trong Firefox. – Nux

0
// iterate localStorage 
for (var i = 0; i < localStorage.length; i++) { 

    // set iteration key name 
    var key = localStorage.key(i); 

    // use key name to retrieve the corresponding value 
    var value = localStorage.getItem(key); 

    // console.log the iteration key and value 
    console.log('Key: ' + key + ', Value: ' + value); 

} 
0

gọn gàng hơn một chút:

getAllLocalStorage() { 
    return Object.keys(localStorage) 
     .reduce((obj, k) => { 
      return { ...obj, [k]: localStorage.getItem(k)}}, {}); 
     } 
Các vấn đề liên quan