nodeJs中linq.js学习

一.在nodeJs 中package.json文件中添加linq模块

如:    "linq" : "3.0.5"

终端中执行npm install  linq模块会自动下载到node_modules中

sample/tutorial.js 是linq.js的demo  可以参考

二.使用

在javascript中使用linq与lambda

  • 直接对Array和String进行扩展,可直接使用
  • 同时扩展了Number、Date、Console的部分方法,方便使用

var Enumerable = require(‘linq‘);

var a = Enumerable.from([‘Javascript‘, ‘Java‘, ‘C#‘, ‘php‘, ‘HTML5‘]).orderBy().toArray();

var c = Enumerable.from([‘Javascript‘, ‘Java‘, ‘C#‘, ‘php‘, ‘HTML5‘]).where("e=>e.startsWith(‘J‘)").toArray();

1.根据lambda表达式创建匿名函数

如  var func = Enumerable.Utils.createLambda(‘x=>x*2‘);

func(5)  //10

2.repeat(count) 由count个该元素组成的新数组

  var d2 = Enumerable.repeat([‘a‘,‘b‘],3).toArray();

3.条件查询: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#里面的定义来的。

4.条件选择: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]

5.排序、去重: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 }]。

6.遍历: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);
 });

很显然两个参数:一个是值,另一个是当前索引

7.取唯一对象: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");

其他几个用法和这个类似。这个没什么好说的。

8 .Skip、Take

Enumerable.Range(1,10).Skip(5)//结果[6,7,8,9,10]
Enumerable.Range(1,10).Take(5)//结果[1,2,3,4,5]

9.取交集、取差集、合并

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)
//结果是两个结果集里面所有值,并自动去重
时间: 2024-11-05 17:25:16

nodeJs中linq.js学习的相关文章

【前端学习笔记】2015-09-09~~~~nodejs中的require()和module.exports

nodejs中一个js文件就可以看做是一个模块 在node环境中,可以直接var a=require('模块路径以及不带扩展名的模块名') exports---module.exports 其中node准备好了module变量, var module={ id:'hello', exports:{} }; 输出模块变量,最好都用module.exports=''或者函数;当赋值不是函数或者数组时,可以对exports直接赋值,建议统一使用module.exports=进行赋值

Node.js学习笔记【3】NodeJS基础、代码的组织和部署、文件操作、网络操作、进程管理、异步编程

一.表 学生表 CREATE TABLE `t_student` ( `stuNum` int(11) NOT NULL auto_increment, `stuName` varchar(20) default NULL, `birthday` date default NULL, PRIMARY KEY  (`stuNum`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 学生分数表 CREATE TABLE `t_stu_score` ( `id` int(11

Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <script src="https://cdn.bootcss.com/vue/2.2.

Node.js(十二)——NodeJs中的Promise

爬虫基于回调和事件的方式去实现,回调也是被诟病已久的问题尤其是callback这种,无论是阅读还是调试都很费劲,甚至我们连代码的堆栈都看不到,这是一种反人类的写法,Promise来拜托这种痛苦的方式 传统方式实现动画效果: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Promise animation</title> <style&g

nodejs出现events.js:72中抛出错误

作为初学者,我在使用nodejs的过程中遇到了如下的运行错误: events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js:901:11) at Server._listen2 (net.js:1039:14) at listen (net.js:1061:10) at Server.listen (net.js:1127:5) at Object.<

JS中模板嵌套学习(代码)

<script src="script/jquery-1.4.2.js"></script>    <script src="script/jsrender.js"></script>    <script id="header" type="text/x-jsrender">        <tr>               <th>序号&

JS中childNodes深入学习

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <div id="box"> <div></div> <div></div> <div></div> </div> <script

【JS学习笔记】js中关于传地址的问题

我觉得初学者应该会遇到很多这样的问题 条件1.不想定义全局变量的时候 条件2.定义了外围变量却又要引用并且修改其中内容的时候 以下转一篇文章 -------------------------------------------------------------------------------------------------------------------------------------------------------- 很多人,包括我,受书本知识消化不彻底的影响,认为 J

JS学习中....

这一周,算是最痛苦的一周了,Js的学习,Dom的理解,Js语言由于是若性语言,所以常遇到写错单词从而导致代码运行不出结果的情况,这就意味着我们写代码的时候得分外小心,分外细心了,下面这是一个简单的留言板. 标题: 姓名: 内容: body{ background-color: black; margin: 0px; padding: 0px; font-family: "微软雅黑"; color: #8f8f8f; } #div1{ width: 700px; height: 400p