【自制】javascript模拟数据库查询及格式化操作

来源:互联网 发布:淘宝卖家复制宝贝链接 编辑:程序博客网 时间:2024/06/09 14:35
为更好地理解数据库查询的底层操作,本人创建了一个js方法模拟数据库的查询操作,同时模拟对查询到的数据进行格式化的过程
1.模拟数据库查询语句  select * from tablename where * order by *

2.模拟格式化(血型)bloodtype : 0,1,2,3 对应O, A, B, AB

具体代码如下:

<span style="font-size:14px;"><!doctype html><html lang="en"> <head>  <meta charset="UTF-8">  <meta name="Generator" content="EditPlus®">  <meta name="Author" content="">  <meta name="Keywords" content="">  <meta name="Description" content="">  <title>Document</title> </head> <body>  <script type="text/javascript">//测试数据var db = [{ 'id' : 1, 'name' : 'houcheng', 'sex' : 'male', 'age' : 29, 'bloodtype' : 0 },{ 'id' : 64, 'name' : 'lucy' , 'sex' : 'female', 'age' : 41, 'bloodtype' :2},{ 'id' : 73, 'name' : 'lily' , 'sex' : 'female', 'age' : 50, 'bloodtype' :1},{ 'id' : 2, 'name' : 'liyanan', 'sex' : 'male', 'age' : 18, 'bloodtype' : 3 },{ 'id' : 125, 'name' : 'john' , 'sex' : 'male', 'age' : 4, 'bloodtype' :3}];//1.模拟数据库查询语句  select * from tablename where * order by *// 创建find方法模拟查询语句// 样例,查找db中的id=2和sex=male的记录,以id升序排列,只获取id和name列//find(db, [ 'id', 'name' ], [ { 'id' : '2' }, { 'sex' : 'male' } ], 'id');function find(table,columns,clause,order){var condition=[];var value=[];var returnObj=[];var count=0;var num=0;var result=[];var obj={};var ascResult=[];var ascNum=null;var arrId=[];//遍历clause中条件及值for(var k=0;k<clause.length;k++){for(var h in clause[k]){condition.push(h);value.push(clause[k][h]);}}count=condition.length;//遍历table各属性for(var i=0;i<table.length;i++){for(var j in table[i]){for(var t=0;t<condition.length;t++){if(j==condition[t]&&table[i][j]==value[t]){num++;}}}if(num==count){returnObj.push(table[i]);}num=0;}//只获取id和name列for(var c=0;c<returnObj.length;c++){obj={};for(var d in returnObj[c]){for(var b=0;b<columns.length;b++){if(d==columns[b]){obj[d]=returnObj[c][d];}}}result.push(obj);}//按id升序排列for(var g=0;g<result.length;g++){arrId.push(result[g][order]);}arrId.sort(function(a,b){return a-b;});for(var l=0;l<arrId.length;l++){for(var m=0;m<result.length;m++){if(arrId[l]==result[m][order]){ascResult.push(result[m]);continue;}}}//console.log(arrId);//console.log(ascResult);return ascResult;};//这里是查询测试console.log(find(db,['id','bloodtype'],[{'sex':'male'}],'id'));//格式化,为数组对象的原型添加格式化方法(format)Array.prototype.format = function (attr,fn) {for(var n=0;n<this.length;n++){this[n]['fmt_'+attr]=fn([this[n][attr]]);}return this;//console.log(this);}//这里是格式化血型测试find(db,['id','bloodtype','name'],[{'sex':'male'}],'id').format('bloodtype',function(data){var types=['O','A','B','AB'];return types[data];});  </script> </body></html></span>


1 0
原创粉丝点击