C# 中的LINQ大家都知道,使用起来非常方便(虽然有点性能损耗),在Java 8 里面也加入了LINQ的支持,可见使用LINQ确实能大幅度提升开发效率。Javascript语言是一个非常灵活的面向对象的语言,然而还是缺少类似LINQ这样的支持,尤其是使用MVVM这样的前端开发模式的时候,对前端数据的大量操作我们都会在前端做,这时候灵活的操作机制就能够极大地解放生产力!
Linq.js就是在这样的背景下诞生的。LINQ.JS官网:http://linqjs.codeplex.com/,这里有源码可供参考,需要引用的JS文件以及生动的Demo。另外这里有API,非常生动详细,让人眼花缭乱,C# linq能做的,这里都能做!http://neue.cc/reference.htm
1.引用库
<script src="Javascript/jquery-1.11.0.min.js"></script>
<script src="Javascript/jquery.linq.js"></script>
<script src="Javascript/linq.min.js"></script>
2.Demo
<script type="text/javascript">
function TestWithLinq() {
//Enumerable.Range(1, 10)
//.Where(delegate(int i) { return i % 3 == 0; })
//.Select(delegate(int i) { return i * 10; });
Enumerable.Range(1, 10)
.Where(function (i) { return i % 3 == 0; })
.Select(function (i) { return i * 10; })
.ToArray()
.forEach(function (i) {
document.writeln(i + ";"); //30;60;90;
});
}
//
function TestDistinct() {
var arr = [100, 200, 300, 400, 500, 200, 400];
Enumerable.From(arr)
.Distinct()
.ToArray()
.forEach(function (i) {
document.write(i + ";"); //100;200;30;40;500;
});
}
function TestIntersectExcept() {
var arr1 = [1, 412, 53, 25];
var arr2 = [53, 25, 22, 20];
Enumerable.From(arr1).Intersect(arr2).ForEach(function (i) {
document.write(i + ";"); //53,25
});
document.write("<br/>")
Enumerable.From(arr1).Except(arr2).ForEach(function (i) {
document.write(i + ";"); // 1;412
});
document.write("<br/>")
Enumerable.From(arr1).Union(arr2).ForEach(function (i) {
document.write(i + ";"); // 1;412;53;25;22;20;
});
}
function TestAlternate() {
Enumerable.Range(1, 5).Alternate('*').ForEach(function (i) {
document.write(i + ";"); //;*;2;*;3;*;4;*;
});
document.write("<br/>")
var r = Enumerable.Range(1, 5).Contains(3);
document.write(r); //ture
}
function TestMaxMin() {
var max = Enumerable.Range(1, 5).Max(); //5
var min = Enumerable.Range(1, 5).Min(); //1
document.write(max + ";" + min);
}
function TestQueryObjects() {
var jsonArray = [
{ "StuID": 1, "StuName": "James", "Age": 30, "Country": "USA" },
{ "StuID": 2, "StuName": "Byant", "Age": 36, "Country": "USA" },
{ "StuID": 3, "StuName": "Lin", "Age": 30, "Country": "Taiwan" },
{ "StuID": 4, "StuName": "Yao", "Age": 30, "Country": "Shanghai" }
];
var querResult = $.Enumerable.From(jsonArray)
.Where(function (x) { return x.Age <= 30; })
.OrderBy(function (x) { return x.StuID; })
.ToArray()
.forEach(function (i) {
document.write(i.StuID + ";" + i.StuName + ";" + i.Age + ";" + i.Country + "<br/>");
});
document.write("====================================" + "<br/>");
var queryResult2 = $.Enumerable.From(jsonArray)
.Where("$.Age<=30") //very good
.OrderBy("$.StuID")
.ToArray()
.forEach(function (i) {
document.write(i.StuID + ";" + i.StuName + ";" + i.Age + ";" + i.Country + "<br/>");
});
}
function TestDelegate(){
Enumerable.Range(0, 20).Where("$ % 3 == 0")
.Select("value, index => {index:index, value:value * 10}")
.WriteLine("$.index + ':' + $.value")
}
function TestOrderBy() {
var list = [
{ a: 2, b: 4, c: 1 },
{ a: 2, b: 3, c: 7 },
{ a: 2, b: 3, c: 3 },
{ a: 4, b: 7, c: 5 },
{ a: 7, b: 3, c: 2 },
{ a: 4, b: 1, c: 5 }];
var result = Enumerable.From(list).OrderBy("$.a").ThenBy("$.c").ThenBy("$.b")
.Select("$.a + ':' + $.b + ':' + $.c").WriteLine("$[0]")
console.log(result);
}
</script>
3.HTML
<input type="button" value="Linq" οnclick="TestWithLinq()" />
<input type="button" value="Distinct" οnclick="TestDistinct()" />
<input type="button" value="IntersectExcept" οnclick="TestIntersectExcept()" />
<input type="button" value="AlternateAndContains" οnclick="TestAlternate()" />
<input type="button" value="MaxMin" οnclick="TestMaxMin()" />
<input type="button" value="QueryObjects" οnclick="TestQueryObjects()" />
<input type="button" value="Delegate" οnclick="TestDelegate()" />
<br /><br />
<input type="button" value="OrderBy" οnclick="TestOrderBy()" />
4.效果
略,这里的效果和C# linq效果一样的。请大家自己下载DEMO
http://download.csdn.net/detail/afandaafandaafanda/8700883