来个linq to js
说这个话题之前,我们来讲一下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的更多相关文章
- JS系列——Linq to js使用小结
前言:前面几篇介绍了下C#基础技术中的几个:反射.特性.泛型.序列化.扩展方法.Linq to Xml等,本来还有两三个知识点没有写完,比如委托.多线程.异步等,后面会陆续将它们补起来,以便作为一套完 ...
- linq to js使用汇总
用途:方便js操作查询json数据. 下载网址:http://jslinq.codeplex.com/ 使用方法:只需要引用linq.js即可. 查询方法: 一.where查询 var myList ...
- linq to js 用法
/** * 排序汇总 * */ var result = Enumerable.From(vm.productList).GroupBy("$.goods_id", null, f ...
- 【JavaScript】又一神器框架:linq.js
引言 前几天针对一个js数组交集的问题请教了下同事,他第一反应就是循环,这也是常规思路,因为我个人更倾向于js些,我便开玩笑,不知道js能不能像linq那样实现这些操作呢?果断百度了一把,果然有现成框 ...
- 使用Js进行linq处理
需要引用的文件 <script src="~/js/linq/jquery.linq-vsdoc.js"></script><script src=& ...
- 数组插件----linq.js
优点 1.支持jQuery插件的方式.jquery.linq.min.js. 2.也可以像普通js方法一样使用.linq.min.js. 3.当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支 ...
- 又一神器框架:linq.js
1.支持jQuery插件的方式.jquery.linq.min.js. 2.也可以像普通js方法一样使用.linq.min.js. 3.当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支持. ...
- JS组件系列——自己动手封装bootstrap-treegrid组件
前言:最近产品需要设计一套相对完整的组织架构的解决方案,由于组织架构涉及到层级关系,在表格里面展示层级关系,自然就要用到所谓的treegrid.可惜的是,一些轻量级的表格组件本身并没有自带树形表格的功 ...
- 仿京东淘宝商品详情页属性选择js效果
在网上找了好久发现都不符合要求就自己摸索写了一个,用到了linq.js这个linq to js 扩展,不然用纯JS遍历json查询要死人啊 demo:http://123.207.28.46:8086 ...
随机推荐
- hash查找
这里使用了编号代替真实的数据,只用来表示算法 #ifndef HASH_DATA_T #define HASH_DATA_T int #endif //HASH_DATA_T typedef stru ...
- Jquery 的遍历,祖先、后代、同胞以及其过滤
什么是遍历? jQuery 遍历,意为“移动”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素.以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止. 下图展示了一个家族树. ...
- JDK环境变量详细讲解
首先,你应该已经安装了 java 的 JDK 了,笔者安装的是:jdk-8u65-windows-x64 下载地址: http://www.oracle.com/technetwork/java/ja ...
- POJ 3608 Bridge Across Islands --凸包间距离,旋转卡壳
题意: 给你两个凸包,求其最短距离. 解法: POJ 我真的是弄不懂了,也不说一声点就是按顺时针给出的,不用调整点顺序. 还是说数据水了,没出乱给点或给逆时针点的数据呢..我直接默认顺时针给的点居然A ...
- Windows系统小知识
前言 本文写作于Window10发布后的2015-08-01,新系统发布后我做了新系统的小白鼠,所以写此文以作记录. WIN10各版本下载地址:http://www.ithome.com/html/w ...
- JProfiler
1 前言 回答之前先让我们来看看什么是jProfiler:JProfiler是一个商业授权的Java剖析工具,由EJ技术有限公司,针对Java EE和Java SE应用程序开发的.它允许两个内存剖面 ...
- RFID基础知识
BS:BinarySearch. TSA:TimeSlottedAloha. BSA:基本二进制搜索算法. DBSA:动态二进制搜索算法. RBSA:后退式二进制搜索算法. FSA:Frame Slo ...
- Maya 与 Matlab 数据互联插件使用教程
实验室做网格处理方面的算法,写界面很麻烦,所以有了利用maya和matlab进行数据连通的念头,于是有了这个插件. 这个插件可以把maya的网格数据导入matlab之中,完成计算之后重新返回maya. ...
- QContester
发个福利好了(求不吐槽名字 自己做的软件,(目前)效果大概如上图- 对于我这种比较喜欢参加一些奇怪比赛的人来说还是有用的. 原理-就是在后台开七个浏览器2333 按左边的按钮会开始抓取比赛,进度可以在 ...
- 部署Linux下的man慢查询中文帮助手册环境
对于Linux运维工作者来说,man查询手册绝对是一个好东西.当我们对一些命令或参数有些许模糊时,可以通过man查询手册来寻求帮助.其实Linux之所以强大, 就在于其强大的命令行, 面对如此繁杂的命 ...