localStorage工具函数-以支持复合数据的存取(对象,数组..)

//localStorage处理封装,以支持对象的存取
//@author visy.wang

export default {
  KEYS:{//保存所有的key,可扩展
    TOKEN_ID: "TOKEN_ID",//认证信息
    BTN_AUTH: "BTN_AUTH",//页面按钮权限
    MENU_LIST: "MENU_LIST",//菜单列表
    WAREHOUSE_LIST: "WAREHOUSE_LIST"//仓库列表
  },

  //添加or修改
  set(key,data){
    if(data!==null && (typeof data === 'object')){//数组or对象
      data = JSON.stringify(data);
    }
    localStorage.setItem(key,data);
  },

  //批量添加or修改
  setBatch(data,fields){
    if(data && data instanceof Object){//data必须是对象
      if(fields instanceof Array){//提取字段并保存
        for(let name of fields){
          if(data[name] === undefined){//提取不到时跳过
            continue;
          }
          this.set(name,data[name]);
        }
      }else if(fields instanceof Object){//提取字段并指定别名后保存,例子:data={xxx:123}, fields={xxx:"XXX"} 保存结果: XXX:123
        for(let name in fields){
          if(data[name] === undefined){
            continue;
          }
          this.set((fields[name]+''),data[name]);
        }
      }else{//fields不是数组或对象时,保存data的所有属性
       for(let name in data){
         this.set(name,data[name]);
       }
      }
    }
  },

  //查询
  get(key){
    const val = localStorage.getItem(key);
    if(val===null || val==='null'){
      return null;
    }else if(val==='undefined'){
      return undefined;
    }else{
      try{
        return JSON.parse(val);//解析成功说明是JSON
      }catch (e) { //解析失败按原值返回
        return val;
      }
    }
  },

  //局部修改-目前只支持对象
  //修改key对应对象中的部分字段,fields格式: {field1:newVal1,field2:newVal2, ...}
  //如果对象不存在,会创建一个key的对象
  //field存在则修改,不存在相当于添加了一个新的属性
  modify(key,fields){
    let obj = this.get(key);
    if(obj === null){
      obj = {};
    }
    if(obj instanceof Object && fields){
      for(let name in fields){
        obj[name] = fields[name];
      }
      this.set(key,obj);
    }
  },

  //删除
  //key:String/Array<String> 传递数组可删除多个
  remove(key){
    if(key instanceof Array){
      for(let k of key){
        localStorage.removeItem(k);
      }
    }else{
      localStorage.removeItem(key);
    }
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值