linq

功能描述

像操作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