• linq.js


    1)条件查询:Where
    
    复制代码
    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 21 },
                { Name: "Lilei", Age: 18 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        var arrRes = Enumerable.From(myList).Where("x=>x.Name=='Jim'").ToArray();
    复制代码
    arrRes的结果为 [{"Name":"Jim","Age":20}]
    
    我们来看看这种写Lamada表达式的原型:
    
    var arrRes = Enumerable.From(myList).Where(function (i) { return i.Name=='Jim'; });
    参数i是对应的集合里面的实体模型,返回类型为bool类型。有没有和C#里面的扩展函数Where的定义很像:public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);参数Func<TSource, bool> predicate为匿名委托,需要传入实体模型TSource,然后返回值为bool类型。其实感觉linq to js的使用就是参照c#里面的定义来的。
    
     
    
    (2)条件选择:Select
    
    复制代码
    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 21 },
                { Name: "Lilei", Age: 18 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        var arrRes = Enumerable.From(myList).Select("x=>x.Age*10").ToArray();
    复制代码
    arrRes得到结果 [200,210,180,140,250]
    
     
    
    (3)排序、去重:OrderBy、Distinct
    
    复制代码
    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 21 },
                { Name: "Lilei", Age: 18 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        var arrRes = Enumerable.From(myList).OrderBy("x=>x.Age").ToArray();//降序OrderByDescending()
    复制代码
    得到的结果会按照Age排序。
    
    复制代码
    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 20 },
                { Name: "Lilei", Age: 20 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        var arrRes = Enumerable.From(myList).Distinct("x=>x.Age").ToArray();
    复制代码
    得到的结果集合的数量为3个:[ { Name: "Jim", Age: 20 }, { Name: "John", Age: 14 }, { Name: "LinTao", Age: 25 }]。
    
     
    
    (4)遍历:ForEach
    
    复制代码
    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 20 },
                { Name: "Lilei", Age: 20 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        Enumerable.From(myList).ForEach(function(value, index){
             document.write("值="+value+",索引="+index);   
     });
    复制代码
    很显然两个参数:一个是值,另一个是当前索引
    
     
    
    (5)取唯一对象:First、FirstOrDefault、Last、LastOrDefault、Single、SingleOrDefault
    
    复制代码
    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 20 },
                { Name: "Lilei", Age: 20 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
    
        var arrRes = Enumerable.From(myList).FirstOrDefault("x=>x.Age>18");
    复制代码
    其他几个用法和这个类似。这个没什么好说的。
    
     
    
    (6)Skip、Take
    
    Enumerable.Range(1,10).Skip(5)//结果[6,7,8,9,10]
    Enumerable.Range(1,10).Take(5)//结果[1,2,3,4,5]
     
    
    (7)取交集、取差集、合并
    
    var array1 = [1,412,5,3,5,412,7];
    var array2 = [20,12,5,5,7,310];
    Enumerable.From(array1).Except(array2)
    //结果3,412,1
    var array1 = [1,412,5,3,5,412,7];
    var array2 = [20,12,5,5,7,310];
    Enumerable.From(array1).Intersect(array2)
    //结果5,7
    var array1 = [1,412,5,3,5,412,7];
    var array2 = [20,12,5,5,7,310];
    Enumerable.From(array1).Union(array2)
    //结果是两个结果集里面所有值,并自动去重
     
    
      当然还有其他一些不常用的方法。有兴趣可以查看文档。其实linq to js还有一种支持jQuery的写法。如下:
    
    Enumerable.Range(1,10).Where("$%2==0")
    //等价于
    Enumerable.Range(1,10).Where("x=>x%2==0")
    但引用文件的时候需要引用jquery.linq.js这个文件。就是写法不同,效果完全一样,选哪一种就是习惯问题了。博主更加倾向lamada方式的写法,因为和C#用法可以保持一致。

    转自:http://blog.csdn.net/tianlianchao1982/article/details/55251402

  • 相关阅读:
    一道百度2014校招笔试题
    leetcode_question_119 Pascal's Triangle II
    STL 查找vector容器中的指定对象:find()与find_if()算法
    QT类的继承结构
    poj 3254 Corn Fields (状态压缩DP)
    从vector容器中查找一个子串:search()算法
    linux 提示符绝对路径
    ssh加密公私钥
    yum-plugin-priroites这个插件的一个文件。
    什么是EPEL 及 Centos上安装EPEL
  • 原文地址:https://www.cnblogs.com/cacti/p/7428457.html
Copyright © 2020-2023  润新知