js对象去重应用
2017-01-30 16:18
162 查看
域名转换
有这样一个需求,host文件如下所示:127.0.0.1 localhost 127.0.0.1 dev.xx.com 10.2.3.4 test.xx.com 10.2.3.4 m.xx.com 10.1.1.1 jhs.m.xx.com 10.1.1.1 jhs.m.xx.com
需要整理成以下格式
127.0.0.1 localhost dev.xx.com 10.2.3.4 test.xx.com m.xx.com 10.1.1.1 jhs.m.xx.com
原本一个域名对应一个ip的格式,现在改为一个ip对应一个域名数组。
首先我们需要读取文件,遍历文件每一行,然后对每一行的两边的空格使用trim()去除两边空格和换行,然后split以空格分隔IP和域名。接下来
//以host为key var host_ip = { }; //以ip为key var ip_host = { }; //先通过上文所取数据,host_ip使用域名为key, ip为value储存 for... host_ip[HOST] = IP; //如host_ip[m.xx.com] = 10.2.3.4
因为host文件中可能出现了重复记录的情况,所以我们考虑,使用host_ip对象去重(js对象key的唯一性)。最后通过for in得到我们想要的ip_host
for(key in host_ip){ var new_key = host_ip[key]; if(ip_host[new_key] instanceof Array){ ip_host[new_key].push(key); } else { ip_host[new_key] = []; ip_host[new_key].push(key) } }
ip_host使用ip做为key, value为host数组,就得到了最开始的格式。
这里面有2个点要注意 :1.读取文件后要去除两边空格和换行符 ; 2.使用post_id对象作为中转和去重,key值唯一,可以在O(n)时间下达到去重的效果,而且查询只需要O(1),这样的对象存储接近于我们常说的hashmap
进度条
有这样一个需求:页面有10个text input,每次填了一个input的时候,进度条显示当前填写的百分比(假如填了两个input,进度条显示为20%,这时把其中一个input置空,进度条显示为10%)正常思路我们会创建一个状态变量count,每次input修改的时候,就修改这个这个状态变量count,并且格式化成百分数,显示在页面上。
那么我们如果每次操作input(监听每次keyup事件),都更新这个count并且更新页面DOM节点,就会造成性能上的浪费(DOM节点的更新是最耗时的),那么我们可以在count之前使用一个对象countObj,这个对象key为input的name,通过这个对象避免重复修改count
//假设这里已经获得10个inputArr的DOM数组 var inputArr; var countObj = {}; function computeCount(){ for(_key in countObj){ count++; } //update in view //在视图中更行count } for(var i = 0, len = inputArr.length; i < len; i++){ inputArr[i].onkeyup = function(){ var name = this.name; if(this.value){ //当input的value不为空的时候,检查countObj对象 if(!countObj[name]){ //如果countObj没有这个input的key countObj[name] = 1; computeCount(); } //如果countObj已经这个input的key则忽略 } else { if(countObj[name]){ delete(countObj[name]); computeCount(); } } } }
相关文章推荐
- JS应用DOM入门(2):DOM的对象属性
- JS应用DOM入门:和DHTML对象模型的比较
- js:对所有对象应用function,有点类for形态
- js对象和继承的应用和问题解决
- JSON和JS对象的区别和JSON的基本应用
- JS应用DOM入门:DOM的对象属性
- JS进阶篇--IE浏览器的ActiveXObject对象以及FileSystemobject的应用扩展(完成)
- js中parent对象应用一些事
- js中parent对象应用一些事
- js:window、location对象的常用属性和方法的应用
- oracle10g- oracle 一个特殊的应用 :复合数据 也叫记录 像一个js临时对象
- js面向对象开发互联网机顶盒应用头端之一
- js对象应用之团购时间倒计时
- JS_应用对象的复制
- js面向对象开发互联网机顶盒应用头端之五
- JS应用DOM入门:DOM的对象属性
- JS面向对象应用二(多差异流程的WEB客户端逻辑设计实现)
- js面向对象开发互联网机顶盒应用头端之三
- JSON是什么?JSON和JS对象的区别和JSON的基本应用
- js事件应用--基础(事件对象、鼠标事件、键盘事件)