【JavaScript】又一神器框架:linq.js

引言

前几天针对一个js数组交集的问题请教了下同事,他第一反应就是循环,这也是常规思路,因为我个人更倾向于js些,我便开玩笑,不知道js能不能像linq那样实现这些操作呢?果断百度了一把,果然有现成框架啊,真是高手在民间啊。

官方的介绍中说支持90多个方法,我觉的起码是C# Linq有的方法它肯定有。

优点

1、支持jQuery插件的方式。jquery.linq.min.js。

2、也可以像普通js方法一样使用。linq.min.js。

3、当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支持。

4、和C# Linq有很相似的地方,这个就会让你上手起来更快,更让我欢喜的是在linq.js的一些方法中,你可以像写Lambda表达式一样去写过滤条件,而且在过滤字符串中支持$符号【下面上图】。

Linq.js结构图

体验一:查询json对象

function TestQueryObjects() {
            var jsonArray = [
                { "StuID": 1, "StuName": "James", "Age": 30, "Country": "USA" },
                { "StuID": 2, "StuName": "Byant", "Age": 36, "Country": "USA" },
                { "StuID": 3, "StuName": "Lin", "Age": 30, "Country": "Taiwan" },
                { "StuID": 4, "StuName": "Yao", "Age": 30, "Country": "Shanghai" }
            ];

            var querResult = $.Enumerable.From(jsonArray)
                .Where(function (x) { return x.Age <= 30; })
                .OrderBy(function (x) { return x.StuID; })
                .ToArray()
                .forEach(function (i) {
                    document.write(i.StuID + ";" + i.StuName + ";" + i.Age + ";" + i.Country + "<br/>");
                });

            document.write("====================================" + "<br/>");

            var queryResult2 = $.Enumerable.From(jsonArray)
                .Where("$.Age<=30") //这个操作很牛气
                .OrderBy("$.StuID")
                .ToArray()
                .forEach(function (i) {
                    document.write(i.StuID + ";" + i.StuName + ";" + i.Age + ";" + i.Country + "<br/>");
                });
        }

上下两个queryResult会得出一样的结果

体验二:Lambda怎么来,Linq.js就怎么来

function TestWithLinq() {             // C# Linq
            //Enumerable.Range(1, 10)
            //.Where(delegate(int i) { return i % 3 == 0; })
            //.Select(delegate(int i) { return i * 10; });

            Enumerable.Range(1, 10)
                .Where(function (i) { return i % 3 == 0; })
                .Select(function (i) { return i * 10; })
                .ToArray()
                .forEach(function (i) {
                document.write(i + ";"); //30;60;90;
            });
}

体验三:去重

function TestDistinct() {
            var arr = [100, 200, 30, 40, 500,200, 40];
            Enumerable.From(arr)
                .Distinct()
                .ToArray()
                .forEach(function(i) {
                    document.write(i + ";"); //100;200;30;40;500;
                });
            }

体验四:交集、差集、并集

function TestIntersectExcept() {
            var arr1 = [1, 412, 53, 25];
            var arr2 = [53, 25,22,20];

            Enumerable.From(arr1).Intersect(arr2).ForEach(function(i) {
                document.write(i + ";"); //53,25
            });

            Enumerable.From(arr1).Except(arr2).ForEach(function (i) {
                document.write(i + ";"); // 1;412
            });

            Enumerable.From(arr1).Union(arr2).ForEach(function (i) {
                document.write(i + ";"); // 1;412;53;25;22;20;
            });
        }

体验五:Alternate、Contains

function TestAlternate() {
            Enumerable.Range(1, 5).Alternate(‘*‘).ForEach(function (i) {
                document.write(i + ";"); //;*;2;*;3;*;4;*;
            });

            var r = Enumerable.Range(1, 5).Contains(3);
            document.write(r); //ture
        }

体验六:Min、Max

function TestMaxMin() {
            var max = Enumerable.Range(1, 5).Max(); //5
            var min = Enumerable.Range(1, 5).Min(); //1
            document.write(max+";"+min); 

        }

总结

能用到这些js的地方有些功能在后台也可以实现,但是我个人更喜欢js的方式,所以就用了上面几个方法,另外看看linq.js的源码对一些算法也能加深理。使用情况和爱好根据个人爱好来定,不过当我找到这个框架时着实有些震撼。

github地址:http://linqjs.codeplex.com/

官方给出 的API和Demo也能很简单:http://neue.cc/reference.htm

如果你也是个js爱好者或者觉的对你有帮助,请不吝点赞,哈哈。

时间: 2024-10-13 20:10:28

【JavaScript】又一神器框架:linq.js的相关文章

JavaScript模块加载框架sea.js 学习一

简单总结sea.js 学习 文件目录结构 /sea/sea.js      下载地址  http://seajs.org/docs/#downloads /sea/jquery-sea.js   下载地址 http://jquery.com/download/ /sea/sea_config.js /sea/home.jsdata.js /sea/data.js 1.html页面代码文件 <style> .ch{height:200px;width:200px;background:#ccc;

又一神器框架:linq.js

1.支持jQuery插件的方式.jquery.linq.min.js. 2.也可以像普通js方法一样使用.linq.min.js. 3.当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支持. 4.和C# Linq有很相似的地方,这个就会让你上手起来更快,更让我欢喜的是在linq.js的一些方法中,你可以像写Lambda表达式一样去写过滤条件,而且在过滤字符串中支持$符号[下面上图]. Linq.js结构图 体验一:查询json对象 function TestQueryObjects()

linq.js

今天在项目里发现一个类似于linq的写法,上网百度了一下发现是linq.js,感觉还挺有用的,于是把这个文章转载过来与大家分享,也让自己学习. 内容: 在做后台开发的时候,总是会碰到将拿到手的数据进行条件校验,而这些数据又不仅仅是单纯的一个,有时候会是一串大数据,需要自己在后台处理进而展示到前台页面上,酱紫自己第一反应就是使用for循环来遍历,并把所需的数据放在相应的地方.可是导致的后果却是再审视后台的代码时,那么多那么多重复的代码,我可以把对同一个dom节点的遍历写两遍,于是我就被同事大神给嘲

Chrome下的语音控制框架MyVoix.js使用篇(四)

在上一篇博文中,我为大家介绍了myvoix.js中的smart learning模块,以及何如使用该功能.(myvoix.js的源码地址会在每一篇文章末尾放出) 文本将拓展 Chrome下的语音控制框架MyVoix.js使用篇(二) 中的实例(没看过的同学请猛戳链接),具象地介绍smart learning模块的使用.在之前的实例中,我们通过语音输入,让 Hello My Voix 标题变化成各种颜色, 并且通过预存指令来增加语音指令的识别率.在本文中将去除预存指令这一块,通过smart lea

JavaScript(React Native、Node.js等)移动、服务端通吃的全栈语言

作者:李宁老师 东北大学计算机专业硕士.曾任沈阳东软股份项目经理.51CTO学院签约讲师.从事软件研究和开发超过20年.长久以来一直从事Java.Android.iOS.C++.Swift.Objective-C以及跨平台游戏引擎(Cocos2d-x.Unity3D等)的开发和技术指导工作.对国内外相关领域的技术.理论和实践有很深的理解和研究. 主要著作包括<Cocos2d-x实战游戏开发指南>(即将出版).<Swift权威指南>.<Android深度探索 卷1和卷2>

测试驱动开发(TDD)及测试框架Mocha.js入门学习

组里马上要转变开发模式,由传统的开发模式(Developer开发,QA测试),转变为尝试TDD(Test-driven development,测试驱动开发)的开发模型.由此将不存在QA的角色,或者仅存很少的QA用于系统模块间的集成测试. 因此代码的测试与开发都将由开发者(Developer)来保证. 这就需要借助优秀测试框架的帮助,尤其是支持TDD开发模式的自动化测试框架更为重要,因为我使用的编程是语言是Node.js,那么广泛使用的Mocha.js将成为我的首选. 在团队转型过程中,很多事情

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的部分方法,方便使用 如

从cocos2d-html5中提取出来的,用做前端开发的框架——cc.js

从cocos2d-html5中提取出来的,用做前端开发的框架——cc.js /**************************************************************************** Copyright (c) 2010-2012 cocos2d-x.org Copyright (c) 2008-2010 Ricardo Quesada Copyright (c) 2011 Zynga Inc. http://www.cocos2d-x.org P

JavaScript宝座:七大框架论剑

JavaScript宝座:七大框架论剑 一周前,Throne of JS大会在多伦多召开,这应该是我参加过的最有料也最不一样的一次大会.大会官网如是说: 加载整个页面,然后再“渐进增强”以添加动态行为,这种构建Web应用的方式已经不够好了.要想让应用加载快,反应灵敏,而且又引领潮流,必须彻底检讨你的开发手段. 这次大会邀请了七大JavaScript框架/库的创建人,他们济济一堂,面对面交流各自的技术理念.所谓七大框架/库分别是:AngularJS.Backbone.Batman.CanJS.Em