How to retrieve all localStorage items without knowing the keys in advance?

前端 未结 8 1471
天涯浪人
天涯浪人 2020-12-04 13:59

I want to show all of the keys and storage written before. My code is below. I created a function (allStorage) but it doesn\'t work. How can I do this?

           


        
相关标签:
8条回答
  • 2020-12-04 14:34

    The easiest way in ES2015+ is:

    const items = { ...localStorage };
    
    0 讨论(0)
  • 2020-12-04 14:34
    // 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 讨论(0)
  • 2020-12-04 14:41
    for (let [key, value] of Object.entries(localStorage)) {
        console.log(`${key}: ${value}`);
    }
    
    0 讨论(0)
  • 2020-12-04 14:48

    If you modify your function to this you can list all items based on key (will list the items only):

    function allStorage() {
    
        var values = [],
            keys = Object.keys(localStorage),
            i = keys.length;
    
        while ( i-- ) {
            values.push( localStorage.getItem(keys[i]) );
        }
    
        return values;
    }
    

    Object.keys is a new addition to JavaScript (ECMAScript 5). It lists all own keys on an object which is faster than using a for-in loop which is the option to this.

    However, this will not show the keys. For that you need to return an object instead of an array (which is rather point-less IMO as this will bring you just as far as you were before with localStorage just with a different object - but for example's sake):

    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;
    }
    

    If you want a compact format listing then do this instead - here each item in the array will have key=item which you later can split into pairs and so forth:

    function allStorage() {
    
        var archive = [],
            keys = Object.keys(localStorage),
            i = 0, key;
    
        for (; key = keys[i]; i++) {
            archive.push( key + '=' + localStorage.getItem(key));
        }
    
        return archive;
    }
    
    0 讨论(0)
  • 2020-12-04 14:48

    localStorage is not an array, but an object, so try sth. like this:

    for (var a in localStorage) {
       console.log(a, ' = ', localStorage[a]);
    }
    
    0 讨论(0)
  • 2020-12-04 14:53

    A little more succinct:

    function getAllLocalStorage() {
        return Object.keys(localStorage)
            .reduce((obj, k) => {
                return { ...obj, [k]: localStorage.getItem(k)}}, {});
            }
    
    0 讨论(0)
提交回复
热议问题