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