当前位置: 首页 > 编程日记 > 正文

js 使用 Lawnchair 存储 json 对象到本地

项目中用到储存点击记录的功能。

Lawnchair是一个轻量级的移动应用程序数据持久化存储方案,同时也是客户端JSON文档存储方法,优点是短小,语法简洁,扩展性比较好。 现在做HTML5移动应用除了LocalStorage的兼容性比较好之外,SQL web database以及IndexedDB都处在僵局中,虽然有人叫嚣着“我们应该干掉 LocalStorage API”,但那是后话,现在也没得选择。 Lawnchair有个曾经的官网:http://westcoastlogic.com/lawnchair/,不过这个站点提供的源码版本过时了,而且还有错误。 需要下载的话,最新版本在https://github.com/brianleroux/lawnchair

###其API汇总 keys (callback) //返回存储对象的所有keys

save (obj, callback)//保存一个对象

batch(array, callback)//保存一组对象

get (key|array, callback)//获取一个或者一组对象,然后调用callback处理

exists (key, callback)//检查是否存在key,并将结果的布尔值(true/false)传递给callback函数

each(callback)//遍历集合,将(对象,对象索引)传递给callback函数

all (callback)//将所有对象放在一个数组返回

remove (key|array, callback)//移除一个或者一组元素。

nuke (callback)//销毁所有

###初始化方法 参数中必须有一个函数作为回调函数,哪怕是空。

var store = new Lawnchair({name:'test'}, function() {});
或者
var store = new Lawnchair(function() {});
复制代码

###option默认为空对象,有三个可选属性

option = {name://相当于表名record://adapter://存储类型
}
复制代码

###save (obj, callback)//保存一个对象

保存形式为对象,如果传入的对象有key属性,那么key会作为索引值保存,如果没有key属性,则自动生成一个key值,然后保存在table._index_中

var store = Lawnchair({name:'tableName'}, function(store) {});
store.save({key:'hust',name:'xesam_1'})
store.save({key:'whu',name:'xesam_2'})
复制代码

###batch(array, callback)//保存一组对象 效果同上

var store = Lawnchair({name:'table'}, function(store) {});
store.batch([{key:'hust',name:'xesam_1'},{key:'whu',name:'xesam_2'}])
复制代码

###exists (key, callback)//检查是否存在key,并将结果的布尔值(true/false)传递给callback函数

store.exists('whu',function(result){console.log(result);//true
})
store.exists('test',function(result){console.log(result);//false
})复制代码

###get (key|array, callback)//获取一个或者一组对象,然后调用callback处理

store.get('hust',function(result){console.log(result);//{key:'hust',name:'xesam_1'}})
复制代码

###all (callback)//将所有对象放在一个数组返回

store.all(function(result){console.log(result);//[{key:'hust',name:'xesam_1'},{key:'whu',name:'xesam_2'}]})
复制代码

###each(callback)//遍历集合,将(对象,对象索引)传递给callback函数

store.each(function(result){console.log(result);//{key:'hust',name:'xesam_1'}// {key:'whu',name:'xesam_2'}})
复制代码

###remove (key|array, callback)//移除一个或者一组元素。

store.remove('whu',function(){store.all(function(result){console.log(result)//[{key:'hust',name:'xesam_1'}]});})
复制代码

###nuke (callback)//销毁所有

store.nuke(function(){store.all(function(result){console.log(result)//[]});})
复制代码

###keys (callback) //返回存储对象的所有keys

store.keys(function(result){console.log(result)//['hust','whu']})
复制代码

##笔者项目为例 新建一个浏览记录的管理者的js文件 代码实现

var haveReadResumeTableName = 'haveReadResumeTableName'function getHaveReadResumeTableManager() {return new Lawnchair({name: haveReadResumeTableName}, function(store) {});
}//清除30天前的查看记录
function cleanBeforeThirtyDaysResumes() {var claerReadResumeHistoryDay = localStorage.claerReadResumeHistoryDay;if(claerReadResumeHistoryDay){try{if(getCurrentDate() == claerReadResumeHistoryDay){return;}}catch(e){//TODO handle the exception}}localStorage.claerReadResumeHistoryDay = getCurrentDate();var manager = getHaveReadResumeTableManager();var beforeThirtyDays = getAfterDay(-30);manager.each(function(resume,keyo) {if(resume.SAVETIME < beforeThirtyDays) {manager.remove(resume.RESUMEID, function() {});}});
}复制代码

查看简历的时候储存简历信息,SAVETIME 对应的是储存的日期。该记录只会保留30天。

		//保存简历到本地function saveThisResumeToLoactionWithResumeAndTime(resumeId, nowTime) {var store = getHaveReadResumeTableManager();// 需要保存的对象var resume = {key: resumeId,RESUMEID: resumeId,SAVETIME: nowTime};// 保存store.save(resume);}
复制代码

批量搜索简历 得到数据后判断简历是否在查看记录里面,已查看会做相应的标示。

				var resumeManager = getHaveReadResumeTableManager();for(var i = 0, len = list.length; i < len; i++) {var resume = list[i];var li = document.createElement('li');//判断是否查看过此简历var haveReadret = false;resumeManager.exists(resume.RESUMEID, function(haveRead) {haveReadret = haveRead;});
复制代码

清除30的记录 适当时候调用。

转载于:https://juejin.im/post/5a31d57a51882535c56cec4d

相关文章:

邓林权:组队学习的那些事

自我介绍 大家好&#xff0c;我是邓林权&#xff0c;职业是数据营销&#xff0c;工作是以数据为主&#xff0c;通过数据进行决策。平时喜欢研究数据&#xff0c;领略数据的魅力&#xff0c;很荣幸能够和大家分享我参加组队学习的收获和故事。 组队学习经历 今年4月开始参加组…

软件测试培训分享:软件测试初期怎么面试工作?

学会了软件测试技术&#xff0c;那么大家后面接下来的准备工作就是面试找工作了&#xff0c;对于新手来说&#xff0c;面试软件测试这个岗位也是要有一些技巧的&#xff0c;下面小编就为大家介绍一下软件测试新手怎么面试工作? 软件测试培训分享&#xff1a;软件测试新手怎么面…

MySQL的正则表达式

1. Mysql的正则表达式仅仅使SQL语言的一个子集&#xff0c;可以匹配基本的字符、字符串。 例如&#xff1a;select * from wp_posts where post_name REGEXP hello&#xff0c;可以检索出列post_name中所有包含hello的行 REGEXP .og .是正则表达式中里一个特殊的字符。它表示…

Datawhale组队学习周报(第020周)

文章目录已经结营的开源内容即将结营的开源内容正在进行的开源内容七月排期的开源内容每周号外Whalepaper 招新公告本周&#xff08;06月21日~06月27日&#xff09;&#xff0c;第 25 期组队学习一共有 3 门开源课程&#xff0c;共组建了 3 个学习群&#xff0c;参与的学习者有…

EffectKeyMap系列1(Ubuntu)

说在前面 相信大多数人都会有这样的体验。当双手在键盘上一直打字或者写代码的时候&#xff0c;一次鼠标操作会让你崩溃。尤其是频繁使用鼠标的时候&#xff0c;工作效率会大幅下降。所以为了提高工作效率&#xff0c;我希望尽量少的使用鼠标。 以下我会总结我使用较高的几款软…

Python培训教程:pycharm常用的快捷键合集

本期Python培训教程&#xff1a;pycharm常用的快捷键合集&#xff0c;希望能在后面的学习和工作中给大家带来一些帮助&#xff0c;首先我们来了解一下什么是PyCharm?PyCharm是一种Python IDE&#xff0c;它不仅具备了一般IDE的功能&#xff0c;还提供了很多高级功能&#xff0…

JavaScript正则表达式基础知识汇总

一、创建正则对象&#xff1a; 1、构造函数RegExp创建正则对象 1 var pattern new RegExp(s$); //pattern匹配以s结尾的字符串 2、使用正则直接量 1 var pattern /s$/; //建议这样写 二、正则表达式字符 1、反斜线\ 在正则表达式中表示转义序列 特殊符号&#xff1a; ^ $ . *…

数据结构(严蔚敏)

说起为什么重新拿起这本书&#xff0c;着实非常惭愧。是因为面试的时候&#xff0c;第一个面试官面试完项目之后。第二面试官说我们就当聊聊天&#xff0c;考考数据结构&#xff0c;算法就好了。结果以一个问题就把我难住了&#xff0c;这个问题是&#xff1a;哈希表是什么&…

组队学习:学习者参考手册

学习者参考手册 作为希望参与组队学习活动的学习者&#xff0c;一定想了解有关本次活动的各种环节。我就通过这份手册来给大家介绍一下。 本手册一共分为四个部分&#xff0c;分别是活动角色划分&#xff0c;活动流程介绍、打卡环节介绍、角色职责介绍。 1. 大航海模型 航路…

软件测试培训适合什么人学习?

软件测试在互联网行业一直有着非常可观的发展前景&#xff0c;想要学习软件测试技术的人也越来越多&#xff0c;但不是所有人都可以学&#xff0c;都能学会的&#xff0c;小编下面就为大家详细的介绍一下软件测试培训适合什么人学习? 软件测试培训适合什么人学习?主要有以下几…

巧用组策略关闭危险端口

最直接的办法&#xff0c;把系统不用的端口都关闭掉&#xff0c;然后重新启动&#xff0c;如果杀毒软件还提示有漏洞攻击&#xff0c;你来找我. 注&#xff1a;关闭的端口有&#xff0c;135&#xff0c;137&#xff0c;138&#xff0c;139&#xff0c;445&#xff0c;1025&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 8. 软间隔与支持向量回归

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 航路开辟者&#xff1a;谢文睿、秦州开源内容&#xff1a;https://githu…

软件测试培训分享:如何划分bug的严重级别

软件测试工程师在工作中&#xff0c;最常见的就是遇见bug&#xff0c;那么所有的bug都是有轻重缓急的&#xff0c;如何划分bug的严重级别呢?本期软件测试培训分享教程就为大家做下详细的介绍。 软件测试培训分享&#xff1a;如何划分bug的严重级别?Bug的严重级别指的是软件缺…

理解 CSS 布局和块级格式上下文

本文的目的是介绍一些概念来帮你增强 CSS 码力。如标题所示这篇文章主要是讲块级格式上下文BFCBlock Formatting Context。你可能没听过这个术语但只要你曾经使用 过CSS 布局你就能明白它。理解 BFC 是什么、它如何工作、如何创建一个 BFC 是非常有用的这些能帮你更好的理解 CS…

Linux环境下用OpenJTAG实现Linux内核的源码级调试

1、通过U-boot将uzImage格式的内核加载到内存中&#xff08;可以从Flash中读取&#xff0c;也可以从U盘、SD卡读取&#xff0c;还可以通过网络&#xff09;&#xff1b; 2、登陆到OpenOCD上&#xff0c;在内核中__turn_mmu_on打上断点&#xff0c;跳过MMU&#xff08;Linux 的链…

如何在Windows中安装Python?

如何在Windows中安装Python&#xff1f; 1. Python的安装 官网下载&#xff1a;https://www.python.org/downloads/windows/ 点开上面的链接&#xff0c;会发现有很多版本。 首先看版本&#xff0c;64-bit是64位版本&#xff0c;32-bit是32位版本&#xff0c;你需要下载跟你…

Python培训教程分享:Python中选择结构是什么

越来越多的人开始报名学习Python技术&#xff0c;那么学习Python技术不是一两天就能学会的&#xff0c;本期小编为大家推荐的Python培训教程主要讲的是“Python中选择结构是什么”&#xff0c;下面来看看具体的内容&#xff0c;大家做好笔记哦。 Python培训教程分享&#xff1a…

UIWebView之获取所点位置图片URL

UIWebView有自己的UIResgure&#xff0c;如果我们手动加入自己的GestureRecognize将不能识别&#xff0c;如UILongPressGestureRecongnizer. 在浏览网页的时候&#xff0c;如果看到喜欢的图片&#xff0c;想把它保存下来如何办呢&#xff1f; 我们可以自己写一个程序来实现&…

【组队学习】【27期】青少年编程(Turtle)

青少年编程&#xff08;Turtle&#xff09; 论坛版块&#xff1a; http://datawhale.club/c/team-learning/34-category/34 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/Turtle 学习目标 针对未接触过python、或者刚接触…

linux下activemq安装与配置

一、下载&#xff1a;apache-activemq-5.14.0-bin.tar.gzhttp://activemq.apache.org/activemq-5140-release.html二、安装activemq1、gz文件拷贝到/usr/local/src目录2、解压启动tar -zxvf apache-activemq-5.14.0-bin.tar.gzcd apache-activemq-5.14.0cd bin./activemq start…

参加软件测试培训需要注意哪些

零基础同学想要学习软件测试&#xff0c;通过自学是比较难的&#xff0c;那么很多人都会考虑软件测试培训机构&#xff0c;那么参加软件测试培训需要注意哪些问题呢?来看看下面的详细介绍。 参加软件测试培训需要注意哪些? 一、科学选择培训机构 要想学到最真实有用的软件测试…

Ubuntu12.04LTS添加broadcom 802.11g无线网卡驱动

Description&#xff1a; windows下无线网驱动可用&#xff0c;切换到Ubuntu下&#xff0c;无线网驱动失效。Reason: boardcom在Ubuntu下没有安装默认的驱动&#xff0c;需要自己手动配置install。 Solution&#xff1a; 1&#xff09;有线连接网络&#xff0c;安装b43-fwcutte…

Android常用知识点回顾

开发过程中经常碰到一些问题或知识点&#xff0c;通过Baidu or Google 最终解决了问题。随后也对该知识点有了一定的掌握&#xff0c;可是过了一段时间再次碰到还是会忘记。所以该篇主要用来记录常见知识点。 山中何所有&#xff0c;岭山多白云。出自南北朝陶弘景&#xff0c;谨…

【组队学习】【27期】集成学习

集成学习 论坛版块&#xff1a; http://datawhale.club/c/32-category/32 开源内容&#xff1a; https://github.com/datawhalechina/ensemble-learning 学习目标 详细介绍了机器学习领域中最经典的算法并给出了相应的数学推导和代码&#xff0c;对于每个算法都进行了细致…

UI设计培训分享:2021年UI设计风格新风向标主要体现在哪些方面

UI设计在近几年的各大企业中显得尤为重要&#xff0c;那么随着近几年的发展&#xff0c;2021年UI设计风格新风向标主要体现在哪些方面呢?大家是否做过了解呢?如果没有&#xff0c;那么来看看下面的详细介绍就知道了。 UI设计培训分享&#xff1a;2021年UI设计风格新风向标主要…

《c陷阱与缺陷》之贪心法

在词法分析中&#xff0c;有条规则&#xff1a;每个符号应该包含尽可能多的字符&#xff0c;被称为“贪心法”或“大嘴法”。 K&R表述如下&#xff1a;如果&#xff08;编译器的&#xff09;输入流截止至某个字符之前都已经被分解为一个个符号&#xff0c;那么下一个符号将…

阿里云大数据计算服务MaxCompute(下篇)

关于阿里云大数据计算服务MaxCompute的详细内容&#xff1a; 阿里云大数据计算服务MaxCompute使用教程 &#xff08;MaxCompute&#xff08;原ODPS&#xff09;是一项大数据计算服务&#xff0c;它能提供快速、完全托管的PB级数据仓库解决方案&#xff0c;使您可以经济并高效的…

【组队学习】【27期】李宏毅机器学习

李宏毅机器学习 论坛版块&#xff1a; http://datawhale.club/c/31-category/31 开源内容&#xff1a; https://github.com/datawhalechina/leeml-notes 学习目标 李宏毅老师的机器学习视频是机器学习领域经典的中文视频之一&#xff0c;也被称为中文世界中最好的机器学习…

Python培训分享:Python新版本中的6个新特性

Python在几年做了一个全面的升级&#xff0c;此次Python升级中有6个新特性&#xff0c;本期小编为大家介绍的Python培训教程就是关于介绍Python新版本中的6个新特性的&#xff0c;来看看下面的详细介绍。 Python培训分享&#xff1a;Python 3.10 有几个新的很酷的功能&#xff…

indows上的android开发环境软件架构5

(二)实验要求&#xff1a; ? 修改按下button 显示的内容中添加上自己的学号姓名&#xff1b; ? 添加一个按钮&#xff0c;按钮名称为“退出”&#xff0c;并且为这个按钮添加事件代码&#xff0c;使得点击这个按钮后退 出程序。事件代码如下&#xff1a; FullscreenActivity.…