说这个话题之前,我们来讲一下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. Python基础之装饰器

    1.什么是装饰器? Python的装饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然 ...

  2. my_strcat()

    char* my_strcat(char* S1,const char* S2){ //严格符合strcat()的接口形式,需要的S1空间是两个字符串空间总和-1. int i=0,j=0; whil ...

  3. WPF之全局快捷键

    目录 1.WPF快捷键实现方式 2.全局快捷键设置界面 3.Windows API调用 4.注册全局快捷键 5.快捷键触发 WPF快捷键实现方式 WPF快捷键实现主要有自定义快捷键命令和全局快捷键两种 ...

  4. SpringMVC从入门到精通之第四章

    第一个知识点:@Controller注解,用于标识这个类是一个后端控制器(类似struts中的action),主要作用就是接受页面的参数,转发页面.中间的业务逻辑是调用业务类处理的这个就是MVC设计模 ...

  5. 老话题:自己编写只截窗口客户区的截屏软件(VB2010)

    现在能实现截屏的软件很多,就不一一列举了,连WIN7都自带截屏软件,甚至OFFICE2010开始都有截屏的功能. 截屏软件虽多,无外乎三种截屏方式:全屏截图.窗口截图.自定义矩形截图. 其中,窗口截图 ...

  6. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)(转)

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  7. Hibernate批量处理数据、HQL连接查询

    一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作     数据库层面 ...

  8. Editor扩展之查看Prefab用在那儿

    Prefab查找需求 在项目开发阶段的中后期,工程中有越来越多的Prefab,当我们要修改一个prefab或删除无用的prefab时,或许我们不是那么清楚该prefab在那些场景中使用着或从未使用过, ...

  9. 第三方登录 (faceBook )

    1.iOS 第三方登录(Facebook,Twitter...)http://www.jianshu.com/p/f64d5ad2ef2a

  10. canvas时钟

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...