说这个话题之前,我们来讲一下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. JVM探索之内存管理(三)

    上节我们介绍了JVM垃圾回收的原则,还有几个垃圾收集算法:标记-清除算法.复制算法.标记整理算法.分代收集算法:现在将要说HotSpt的垃圾收集器,这小节将只是理论. Java虚拟机规范对垃圾收集器的 ...

  2. Linux磁盘管理之元数据、文件和目录、链接文件03

    一.存储设备分区简述 文件系统最终目的是把大量数据有组织的放入持久性的存储设备,如硬盘.硬盘存储能力具有持久性,不会因为断电而消失,存储量大,但读取速度慢.操作系统读取硬盘的时候,不会一个一个扇区读取 ...

  3. MS SQLServer 操作XML语句的存储过程

    -- ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ...

  4. OpenStack 企业私有云的若干需求(7):电信行业解决方案 NFV

    自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云(Hybrid cloud)支持 主流硬件支持.云快速交付 ...

  5. C#基础----Linq之List<T>篇

    最近有用到List处理排序以及分页的问题.想想还是写一个博客记录一下.以下围绕Person类实现,Person类只有Name和Age两个属性   一.List<T>排序 1.1 List& ...

  6. MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)

    我们在玩游戏的时候,我们进入游戏后第一眼往往都是看到游戏世界中的场景,当然除了个别例外,因为那些游戏将游戏场景隐藏了起来,如文字游戏中的地点一样.既然我们接触了游戏世界的核心,那么作为核心的场景又包括 ...

  7. Beyond IT

    Know Yourself <开讲啦> 20160306 潘建伟:探索的动机

  8. Appium学习实践(三)测试用例脚本以及测试报告输出

    之前Appium学习实践(二)Python简单脚本以及元素的属性设置中的脚本,会有一个问题,就是在每个测试用例完成之后都会执行tearDown,然后重新setUp,这样导致脚本的执行效率偏低,而且会有 ...

  9. poj2486Apple Tree[树形背包!!!]

    Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9989   Accepted: 3324 Descri ...

  10. AC日记——单词倒排 1.7 28

    28:单词倒排 总时间限制:  1000ms 内存限制:  65536kB 描述 编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔. 输 ...