Javascript 利器 - Linq.js

       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









      

你可能感兴趣的:(JavaScript,linqjs)