像操作sql一样操作数据,用例见 linq.html
用过C#的同学都知道在C#中有个LINQ非常强大,可以像sql查询一样对数据进行筛选、组合、分组、遍历......等等很多功能,简直就是一个神器。
现在在js中也有了linq.js,在前端开发中又多了一个神器。
./libs/linq.js
只需要引入一个js文件即可。项目源码清晰可读,实际使用可以引入linq.min.js
<script type="application/javascript" src="libs/linq.js"></script>
下面列举一些常用的方法,毕竟总共有九十多个方法。以下面这个数组为例,包含城市名、人口、面积
var jsonArray = [
    {
        'nama': '北京',
        'population':'2154.00',
        'area':'16410'
    },
    {
        'nama': '上海',
        'population':'2424.00',
        'area':'6340'
    },
    {
        'nama': '广州',
        'population':'1490.44',
        'area':'7434'
    }
];
获取面积小于"8000"的数据
var result = Enumerable.From(jsonArray)
    .Where(function (x) { return x.area < 8000 })
    .ToArray();
// 返回 [{nama: "上海", population: "2424.00", area: "6340"},{nama: "广州", population: "1490.44", area: "7434"}]
根据面积排序
var result = Enumerable.From(jsonArray)
    .OrderBy(function (x) { return x.population })
    .ToArray();
条件选择
var result = Enumerable.From(jsonArray)
    .Select(function (x) { return x.nama + ' 人口:' + x.population + ' 面积:' + x.area })
    .ToArray();
数据循环
Enumerable.From(jsonArray).ForEach(function (item, index) {
    // console.log(item);
});
获取第一条数据
Enumerable.From(jsonArray).First();
Enumerable.From(jsonArray).FirstOrDefault();
获取最后一条数据
Enumerable.From(jsonArray).Last();
Enumerable.From(jsonArray).FirstOrDefault();
以上方法中的function (x) { return x.population }均可以简写为"x => x.population"
// 获取最大的面积  返回 2424.00
var Max = Enumerable.From(jsonArray).Max("x=>x.population"); 
// 获取最大的面积所在的对象 返回 {nama: "上海", population: "2424.00", area: "6340", a: 1}
var MaxBy = Enumerable.From(jsonArray).MaxBy("x=>x.population");
// 返回最小的面积  返回  1490.44
var Min = Enumerable.From(jsonArray).Min("x=>x.population");
// 返回最小的面积所在的对象  返回  {nama: "广州", population: "1490.44", area: "7434", a: 1}
var MinBy = Enumerable.From(jsonArray).MinBy("x=>x.population");
去重
var arr = [100, 200, 30, 40, 500,200, 40];
arr = Enumerable.From(arr).Distinct().ToArray();
// 返回 [100,200,30,40,500]
多维数组去重
var arr = [
    {num: 100},
    {num: 200},
    {num: 200},
    {num: 400},
];
arr = Enumerable.From(arr).Distinct(function (x) {
    return x.num;
}).ToArray();
// 返回[{num: 100},{num: 200},{num: 400}]
生成编号
Enumerable.Range(1, 10).ToArray();
// 返回[1,2,3,4,5,6,7,8,9,10]
获取前5条数据
Enumerable.Range(1, 10).Take(5).ToArray();
// 返回 [1,2,3,4,5]
获取后5条数据
Enumerable.Range(1, 10).Skip(5).ToArray();
// 返回 [6,7,8,9,10]
获取差集
var array1 = [1, 412, 53, 25];
var array2 = [53, 25,22,20];
var arr1 = Enumerable.From(array1).Except(array2).ToArray();
// 返回 [1,412]
获取并集
var array1 = [1, 412, 53, 25];
var array2 = [53, 25,22,20];
var arr1 = Enumerable.From(array1).Intersect(array2).ToArray();
// 返回 [53,25]
获取并集(合并)
var array1 = [1, 412, 53, 25];
var array2 = [53, 25,22,20];
var arr1 = Enumerable.From(array1).Except(array2).ToArray();
// 返回 [1,412,53,25,22,20]
包含
var array1 = [1, 412, 53, 25];
var r = Enumerable.From(array1).Contains(412);
// 返回true
