说这个话题之前,我们来讲一下C#的linq  语法。在C#里面我们会对列表进行操作,如OrderBy(p=>p.property),Where(p=>p.property==..)

括号里面的就是所谓的lamda表达式。下面我们就来实现对js里面对象数组的类似操作。

先说一下思想:

在代码中先用一个占位符替代,最后动态的替代占位符express,然后将替代占位符后的函数的字符窜代码用eval()执行一下,成为一个有效的函数。

代码如下:

      var query = function (exp, isAsc) {
var isArray = function (queryArr) {
return Object.prototype.toString.call(queryArr) == "[object Array]";
};
var whereTemplete = function (queryArr) {
var arr = [];
if (isArray(queryArr)) {
for (var i = ; i < queryArr.length; i++) {
var e = queryArr[i];
if (express) {
arr.push(e);
}
}
}
return arr;
};
var orderTemplete = {
orderAscTemplete: function (queryArr) {
var temp = {};
var arr = queryArr;
if (isArray(arr)) {
for (var i = ; i < arr.length; i++) {
for (var k = ; k < arr.length; k++) {
if (arr[i]['express'] < arr[k]['express']) {
temp = arr[i]
arr[i] = arr[k];
arr[k] = temp;
}
}
}
}
return arr;
},
orderDescTemplete: function (queryArr) {
var temp = {};
var arr = queryArr;
if (isArray(arr)) {
for (var i = ; i < arr.length; i++) {
for (var k = ; k < arr.length; k++) {
if (arr[i]['express'] > arr[k]['express']) {
temp = arr[i]
arr[i] = arr[k];
arr[k] = temp;
}
}
}
}
return arr;
}
};
var hasOper = exp.indexOf('>' | '=' | '<');
var str = hasOper >=
? whereTemplete.toString().replace('express', exp)
: (
isAsc
? orderTemplete.orderAscTemplete.toString().replace(/express/g, exp.replace('e.', ''))
: orderTemplete.orderDescTemplete.toString().replace(/express/g, exp.replace('e.', ''))
); return eval('0,' + str);
}
Array.prototype.Query = function () {
var self = this;
return arguments.length ==
? (new query(arguments[])(self))
: (new query(arguments[], arguments[])(self));
}

代码不难,大家是可以看懂的,慢慢体会一下,没什么要讲解的地方。

唯一的就是大家要对原型要有一定的了解。

然后说一下调用的具体方法:

     var arr = [{ name: 'aaa', grade: 90 }, { name: 'ccc', grade: 70 }, { name: 'bbb', grade: 80 }];
//var filterArr = arr.Query("e.grade", false); 实现排序
var filterArr = arr.Query('e.grade>80');//实现过滤 for (var i = 0; i < filterArr.length; i++) {
document.writeln(filterArr[i].name);
}

来个linq to js的更多相关文章

  1. JS系列——Linq to js使用小结

    前言:前面几篇介绍了下C#基础技术中的几个:反射.特性.泛型.序列化.扩展方法.Linq to Xml等,本来还有两三个知识点没有写完,比如委托.多线程.异步等,后面会陆续将它们补起来,以便作为一套完 ...

  2. linq to js使用汇总

    用途:方便js操作查询json数据. 下载网址:http://jslinq.codeplex.com/ 使用方法:只需要引用linq.js即可. 查询方法: 一.where查询 var myList ...

  3. linq to js 用法

    /** * 排序汇总 * */ var result = Enumerable.From(vm.productList).GroupBy("$.goods_id", null, f ...

  4. 【JavaScript】又一神器框架:linq.js

    引言 前几天针对一个js数组交集的问题请教了下同事,他第一反应就是循环,这也是常规思路,因为我个人更倾向于js些,我便开玩笑,不知道js能不能像linq那样实现这些操作呢?果断百度了一把,果然有现成框 ...

  5. 使用Js进行linq处理

    需要引用的文件 <script src="~/js/linq/jquery.linq-vsdoc.js"></script><script src=& ...

  6. 数组插件----linq.js

    优点 1.支持jQuery插件的方式.jquery.linq.min.js. 2.也可以像普通js方法一样使用.linq.min.js. 3.当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支 ...

  7. 又一神器框架:linq.js

    1.支持jQuery插件的方式.jquery.linq.min.js. 2.也可以像普通js方法一样使用.linq.min.js. 3.当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支持. ...

  8. JS组件系列——自己动手封装bootstrap-treegrid组件

    前言:最近产品需要设计一套相对完整的组织架构的解决方案,由于组织架构涉及到层级关系,在表格里面展示层级关系,自然就要用到所谓的treegrid.可惜的是,一些轻量级的表格组件本身并没有自带树形表格的功 ...

  9. 仿京东淘宝商品详情页属性选择js效果

    在网上找了好久发现都不符合要求就自己摸索写了一个,用到了linq.js这个linq to js 扩展,不然用纯JS遍历json查询要死人啊 demo:http://123.207.28.46:8086 ...

随机推荐

  1. 元组tuple

    tuple和list的主要区别就是tuple里的元素的是不能改变的,即tuple时immutable的 #创建tuple >>> tupa = (12 , 'ed' , 34) &g ...

  2. C语言怎么将用户账号密码写入文件实现登录注册功能?

    创建储存用户账号密码的文件: void Create_File() { FILE *fp; if ((fp = fopen("users.txt","rb")) ...

  3. EarthWarrior3D游戏ios源码

    这是一款不错的ios源码源码,EarthWarrior3D游戏源码, 并且游戏源代码支持多平台. 适用于cocos v2.1.0.0版本 源码下载:http://code.662p.com/view/ ...

  4. mysql 二进制文件增量备份

    1.首先在my.cnf下添加二进制文件路径(windows下文件名称为my.ini) 在[mysqld]下添加 log-bin=mysql-bin 2.centos下默认安装mysql 5.6,数据默 ...

  5. 报表开发工具中开放的部分图表js接口列表

    1.. 描述 报表开发工具FineReport 8.0版本中开放了部分图表js接口,在具体应用的过程中很多人都不知道这些接口到底有什么作用,该怎么应用,所以根据我自己的应用在下面归纳了这些新开放js接 ...

  6. MMORPG大型游戏设计与开发(part5 of net)

    上一部分将服务器的具体代码的实现介绍给了大家,想必大家也了解到了服务器处理一次消息的复杂度.如果大家能够将各个过程掌握清楚,就会发觉其实整个逻辑与交互过程是比较清晰的.那么服务器与服务器之间的通讯,其 ...

  7. [转]二重积分换元法的一种简单证明 (ps:里面的符号有点小错误,理解就好。。。

    ---恢复内容开始--- 10.3二重积分的换元积分法 在一元函数定积分的计算中,我们常常进行换元,以达删繁就简的目的,当然,二重积分也有换元积分的问题. 首先让我们回顾一下前面曾讨论的一个事实. 设 ...

  8. 手机打开PDF文档中文英文支持(乱码问题)解决攻略

    电子书的优点很多,随时随地阅读,无论白天黑夜走路坐车都能阅读:想确认一下某句话是不是这本书里的,搜索一下就可以知道:搬家也不用发愁,几万本书带在身上,依然轻松步行.我买了一台平板主要动因就是为了看书, ...

  9. save()、saveOrUpdate()、merge()的区别

    一.Save() save()方法能够保存实体到数据库.假如两个实体之间有关系(例如employee表和address表有一对一关系),如果在没有事务的情况下调用这个方法保存employee这个实体, ...

  10. 云计算之路-阿里云上:RDS用户的烦恼

    http://www.cnblogs.com/cmt/p/3586029.html *博主注:阿里云数据库真的这么可笑?