一些简单的帮助类(2)-- JavaSctipt Array Linq
在日程工作中经常会遇到这样的问题 一个JS数组 我们要找出其中 一些符合要求的类容
又或者对数组里的类容求和求平均数之类的一般的做法是循环里面的类容做判断添加到一个新的集合里
var array = [];
array.push(1);
array.push(2);
array.push(3);
array.push(4);
array.push(5);
array.push(6); var whereArray = [];
for(var model in array)
{
if(model<3)
{
whereArray.push(model);
}
}
如果需要做查询的代码多了我们就不得不写非常多的循环
回想下C#里的List集合和Array也差不多 但是System.Linq.Enumerable 扩展类 却给了他非常多的Linq 扩展方法
使们我们能像如下代码这样查询List
List<int> list = new List<int>();
a.Add(1);
a.Add(2);
a.Add(3);
a.Add(4);
a.Add(5);
a.Add(6);
List<int> copyList = list.Where(model => model < 3);
拿JavaSctipt 能不能做出一个跟System.Linq.Enumerable 差不多一样的扩展类来了答案是能的我们来定义一段如下的JavaScript脚本
Array.prototype.Where = function (func) {
var copy = [];
for (var model in this) {
try {
if (func(model)) {
copy.push(model);
}
}
catch (ex) { }
}
}
把它放在页面顶部我们会惊喜的发现 Array 多了一个Where方法 Javascript 每个类的方法都会在prototype中向他添加一个方法也就是向内中添加了一个方法
我们来调用试下
var array = [1,2,3,4,5,6];
var copyArray = array.Where(function (model) {return model < 1;})
我们会发现这段代码得到了和第一段代码相同的效果但代码却要减少不少
这样我们就可以吧 其他System.Linq.Enumerable里的常用方法挨个定义出来
(function () {
/*
筛选符合要求的元素
func: (e)=>{return bool}
return Array
*/
Array.prototype.Where = function (func) {
var copy = [];
for (var model in this) {
try {
if (func(model)) {
copy.push(model);
}
}
catch (ex) { }
}
}
/*
求和
func: (e)=>{return Number}
return Number
*/
Array.prototype.Sum = function (func) {
var int = 0;
for (var model in this) {
try {
var NaN = func(model);
if (isNaN(NaN)) {
a += NaN * 1;
}
}
catch (ex) { }
}
return int;
}
/*
获取集合里第一个符合要求的元素
func: (e)=>{return bool}
return e or NULL
*/
Array.prototype.Find = function (func) {
for (var model in this) {
try {
if (func(model)) {
return model;
}
}
catch (ex) { }
}
return null
}
})(Array)
定义好后每次 使用就直接把存放这段JS的文件拖到页面上 每次就都能使用这些扩展方法了
还有一点就是JavaSctipt 里的方法注释是这样的/**/ 而不是//
区别就是在VS IDE里能有 提示
技术交流群
一些简单的帮助类(2)-- JavaSctipt Array Linq的更多相关文章
- VC++ 一个简单的Log类
在软件开发中,为程序建立Log日志是很必要的,它可以记录程序运行的状态以及出错信息,方便维护和调试. 下面实现了一个简单的Log类,使用非常简单,仅供参考. // CLogHelper.h : hea ...
- C++ 最简单的日志类
最近搞一个 C++ 项目的二次开发,没玩过 C++,可谓步履维艰.自己写个简单的日志类都被各种坑折磨.终于搞定了. 参考了这篇博客,并且进一步简化:https://www.cnblogs.com/Ds ...
- python+selenium之自定义封装一个简单的Log类
python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...
- C++定义一个简单的Computer类
/*定义一个简单的Computer类 有数据成员芯片(cpu).内存(ram).光驱(cdrom)等等, 有两个公有成员函数run.stop.cpu为CPU类的一个对象, ram为RAM类的一个对象, ...
- Python之自定义封装一个简单的Log类
参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...
- js进阶 10-7 简单的伪类选择器可以干什么
js进阶 10-7 简单的伪类选择器可以干什么 一.总结 一句话总结:伪类选择器是冒号. 1.学而不用,有什么用? 多用啊,在项目中多用 2.简单的伪类选择器可以干什么? 除某元素以外,某元素的一切索 ...
- 【C/C++开发】C++实现简单的线程类
C++封装一个简单的线程类 多线程编程简介: 大家在编程时,经常需要在程序中启动一个或多个线程来处理任务,而如果每次都是去调用系统创建线程的API函数来创建,代码量虽不多,但线程的创建和业务逻辑代码就 ...
- Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》
Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676
- 043-PHP简单获得一个类对应的反射信息
<?php // 简单获得一个类对应的反射信息 class demo{ CONST CON_STR = '123456'; public $str_1; private $str_2; prot ...
随机推荐
- xp系统下网络打印机怎么设置
亲测,可行 打印机共享可以有效节约办公资源,提高办公效率.可是还有很多朋友不知道怎么设置,我们这里讲一下网络打印机的设置方法. 1.我们点开桌面左下角的开始菜单,选择“打印机和传真” 2.我们右击某个 ...
- 【解决】Microsoft Visual Studio 2012 打开2008下编译的silverlight3项目
最近因为项目需要,老师要我搞一发流程设计器,毫无头绪呀妈蛋 .. 我考虑是用silverlight呢还是jquery .. 上网找了找 .. 有一个用silverlight3写的 貌似IDE用的是V ...
- csipsimple 下载地址
项目下载地址: http://git.oschina.net/zencodex/CSipSimple https://github.com/zencodex/csip
- PC问题-使用BAT方法设置IP地址
::------以下为批处理文件内容---- @echo off ::set slection1= set/p slection1=请输入IP地址: netsh interface ip set ad ...
- [转]freemaker格式化日期
转至:http://wentao365.iteye.com/blog/2047234 1.格式化日期 ${updated?string("yyyy-MM-dd HH:mm:ss") ...
- 什么是Scale Up和Scale Out?
导读:Scale Out(也就是Scale horizontally)横向扩展,向外扩展 Scale Up(也就是Scale vertically)纵向扩展,向上扩展 无论是Scale Out,Sca ...
- [Unity] How to stop camera rendering?
http://answers.unity3d.com/questions/147988/how-to-pause-the-main-camera-.html I would simply pause ...
- 【C语言】编写一个函数实现n^k,使用递归实现
#include <stdio.h> int fuc(int x,int n) { if(n!=1) return x*fuc(x,n-1); return 1; } int main() ...
- java缓存算法【转】
http://my.oschina.net/u/866190/blog/188712 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法,每种算法各有各的优势和缺点及 ...
- MP3的频率、比特率、码率与音质的关系
想知道MP3的频率.比特率.码率与音质的关系,是不是频率越高,码率越高,音质就越好.好像MP3大多数的频率都是44100HZ的.码率有128,192等等. 这里所说的频率是採样率,一般都是44100K ...