Javascript版IEnumerable
时间:2010-09-20 来源:飯團
本js库利用原型生成扩展方法主要针对json数据的查询和一些扩展计算,当然你可以对一般的数组甚至Jquery对象进行查询和计算,另外本库不依赖Jquery 当在本库之前加载jquery时会生成对jquery对象的转换方法,Demo中引用的jquery以及其的一个扩展库只是为了方便展示,并非必要
下面是一些介绍
不得不承认我被.NET"毒害"很深,习惯了一些方便的方法因此推广到页面前端的工作上,可能对不熟悉C#风格的童鞋起不到很好的帮助
正传吧
本库的基本对象为js_lambda, js Object可以通过AsEnumerable()转换成js_lambda对象
执行方法后有些依然返回js_lambda对象,这些可以进行复杂的连续方法,有些会返回Object,一般都为单个对象,如果有需要可以套中括号变成数组
js_lambda对象可以通过属性Value取到Object
我们先假设一个json对象,恩。。1个可能不够就来2个吧-___,-
var obj = [{ "id": 2, "content": "C" }, { "id": 1, "content": "D" }, { "id": 3, "content": "A"}];var obj2 = [{ "id": 4, "content": "E" }, { "id": 6, "content": "F" }, { "id": 5, "content": "B"}];
因为下面演示的需要,再声明一个伪类
var newclass = function (o) {this.idx = o + 1;
}
Select(T):js_lambda ①T:func(object,js_lambda)将序列中的每个元素投影到新表中
②T:func(object,int,js_lambda)通过合并元素的索引将序列的每个元素投影到新表中
查询某属性:
var data = obj.AsEnumerable().Select("i=>i.id").Value;
合并索引数据查询所有属性并重新组装成匿名类:
var data = obj.AsEnumerable().Select("(i,index)=>new {a=index+1,b=i.id,c=i.content}").Value;
合并索引数据查询所有属性并重新组装成js命名伪类,就是之前的newclass君:
var data = obj.AsEnumerable().Select("(i,index)=>new newclass(index){id=i.id,content=i.content}").Value;
Where(T):js_lambda ①T:func(object,js_lambda) 基于谓词筛选值序列
②T:func(object,int,js_lambda)基于谓词筛选值序列。将在谓词函数的逻辑中使用每个元素的索引
条件查询:
var data = obj.AsEnumerable().Where("i=>i.id>1").Value;
合并索引数据后条件查询:
var data = obj.AsEnumerable().Where("(i,index)=>i.content<'C'||index<1").Value;
Union(js_lambda):js_lambda 通过使用默认的相等比较器生成两个序列的并集
合并obj和obj2:
var data = obj.AsEnumerable().Union(obj2.AsEnumerable()).Value;
OrderBy(T):js_lambda T:func(object,js_lambda)根据键按升序对序列的元素排序
对id做正序:
var data = obj.AsEnumerable().OrderBy("i=>i.id").Value;
OrderByDescending(T):js_lambda T:func(object,js_lambda)根据键按升序对序列的元素排序
对content做倒序:
var data = obj.AsEnumerable().OrderByDescending("i=>i.content").Value;
First():Object 返回序列中的第一个元素
var data = obj.AsEnumerable().First();
Last(): Object 返回序列的最后一个元素
var data = obj.AsEnumerable().Last();
Min(T):Object 返回谓词序列中的最小值
取id最小值:
var data = obj.AsEnumerable().Min("i=>i.id");
Max(T):Object 返回谓词序列中的最大值
取content最大值:
var data = obj.AsEnumerable().Max("i=>i.content");
Sum(T):Object 计算谓词序列之和
对content求和:
var data = obj.AsEnumerable().Sum("i=>i.content");
Aggregate(T):Object 对序列应用累加器函数
对id累加求和:
var data = obj.AsEnumerable().Select("i=>i.id").Aggregate("(i,next)=>i+next");
合并obj和obj2,对content反向累加并以'_'号连接,且当content不大于'C'时以'B'替换之: var data = obj.AsEnumerable().Union(obj2.AsEnumerable()).Select("i=>i.content").Aggregate("(i,next)=>(next>'C'?next:'B')+'_'+i");
附件:Demo和库
/Files/ibean/js_lambda_Simpple.rar