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" onclick="TestWithLinq()" /> <input type="button" value="Distinct" onclick="TestDistinct()" /> <input type="button" value="IntersectExcept" onclick="TestIntersectExcept()" /> <input type="button" value="AlternateAndContains" onclick="TestAlternate()" /> <input type="button" value="MaxMin" onclick="TestMaxMin()" /> <input type="button" value="QueryObjects" onclick="TestQueryObjects()" /> <input type="button" value="Delegate" onclick="TestDelegate()" /> <br /><br /> <input type="button" value="OrderBy" onclick="TestOrderBy()" />4.效果
略,这里的效果和C# linq效果一样的。请大家自己下载DEMO
http://download.csdn.net/detail/afandaafandaafanda/8700883