linq

功能描述

像操作sql一样操作数据,用例见 linq.html

概述

用过C#的同学都知道在C#中有个LINQ非常强大,可以像sql查询一样对数据进行筛选、组合、分组、遍历……等等很多功能,简直就是一个神器。 现在在js中也有了linq.js,在前端开发中又多了一个神器。

依赖的模块

./libs/linq.js

快速使用

只需要引入一个js文件即可。项目源码清晰可读,实际使用可以引入linq.min.js

  1. <script type="application/javascript" src="libs/linq.js"></script>

下面列举一些常用的方法,毕竟总共有九十多个方法。以下面这个数组为例,包含城市名、人口、面积

  1. var jsonArray = [
  2. {
  3. 'nama': '北京',
  4. 'population':'2154.00',
  5. 'area':'16410'
  6. },
  7. {
  8. 'nama': '上海',
  9. 'population':'2424.00',
  10. 'area':'6340'
  11. },
  12. {
  13. 'nama': '广州',
  14. 'population':'1490.44',
  15. 'area':'7434'
  16. }
  17. ];

条件查询

获取面积小于”8000”的数据

  1. var result = Enumerable.From(jsonArray)
  2. .Where(function (x) { return x.area < 8000 })
  3. .ToArray();
  4. // 返回 [{nama: "上海", population: "2424.00", area: "6340"},{nama: "广州", population: "1490.44", area: "7434"}]

根据面积排序

  1. var result = Enumerable.From(jsonArray)
  2. .OrderBy(function (x) { return x.population })
  3. .ToArray();

条件选择

  1. var result = Enumerable.From(jsonArray)
  2. .Select(function (x) { return x.nama + ' 人口:' + x.population + ' 面积:' + x.area })
  3. .ToArray();

数据循环

  1. Enumerable.From(jsonArray).ForEach(function (item, index) {
  2. // console.log(item);
  3. });

获取第一条数据

  1. Enumerable.From(jsonArray).First();
  2. Enumerable.From(jsonArray).FirstOrDefault();

获取最后一条数据

  1. Enumerable.From(jsonArray).Last();
  2. Enumerable.From(jsonArray).FirstOrDefault();

以上方法中的function (x) { return x.population }均可以简写为"x => x.population"

  1. // 获取最大的面积 返回 2424.00
  2. var Max = Enumerable.From(jsonArray).Max("x=>x.population");
  3. // 获取最大的面积所在的对象 返回 {nama: "上海", population: "2424.00", area: "6340", a: 1}
  4. var MaxBy = Enumerable.From(jsonArray).MaxBy("x=>x.population");
  5. // 返回最小的面积 返回 1490.44
  6. var Min = Enumerable.From(jsonArray).Min("x=>x.population");
  7. // 返回最小的面积所在的对象 返回 {nama: "广州", population: "1490.44", area: "7434", a: 1}
  8. var MinBy = Enumerable.From(jsonArray).MinBy("x=>x.population");

去重

  1. var arr = [100, 200, 30, 40, 500,200, 40];
  2. arr = Enumerable.From(arr).Distinct().ToArray();
  3. // 返回 [100,200,30,40,500]

多维数组去重

  1. var arr = [
  2. {num: 100},
  3. {num: 200},
  4. {num: 200},
  5. {num: 400},
  6. ];
  7. arr = Enumerable.From(arr).Distinct(function (x) {
  8. return x.num;
  9. }).ToArray();
  10. // 返回[{num: 100},{num: 200},{num: 400}]

生成编号

  1. Enumerable.Range(1, 10).ToArray();
  2. // 返回[1,2,3,4,5,6,7,8,9,10]

获取前5条数据

  1. Enumerable.Range(1, 10).Take(5).ToArray();
  2. // 返回 [1,2,3,4,5]

获取后5条数据

  1. Enumerable.Range(1, 10).Skip(5).ToArray();
  2. // 返回 [6,7,8,9,10]

获取差集

  1. var array1 = [1, 412, 53, 25];
  2. var array2 = [53, 25,22,20];
  3. var arr1 = Enumerable.From(array1).Except(array2).ToArray();
  4. // 返回 [1,412]

获取并集

  1. var array1 = [1, 412, 53, 25];
  2. var array2 = [53, 25,22,20];
  3. var arr1 = Enumerable.From(array1).Intersect(array2).ToArray();
  4. // 返回 [53,25]

获取并集(合并)

  1. var array1 = [1, 412, 53, 25];
  2. var array2 = [53, 25,22,20];
  3. var arr1 = Enumerable.From(array1).Except(array2).ToArray();
  4. // 返回 [1,412,53,25,22,20]

包含

  1. var array1 = [1, 412, 53, 25];
  2. var r = Enumerable.From(array1).Contains(412);
  3. // 返回true