Underscore.js基础入门
公司产品集成了对Underscore.js,所以需要对这个库有一定的了解。通过查阅资料,发现这个库主是对Array和JSON的处理支持。通过Underscore.js库,可以方便的对Array和JSON数据进行操作。下面是一些我学习中做测试写的示例,po在这里,供将来复习。
var $ = lib.c.$;
var _ = lib.Underscore.require(); /*
这个函数演示了map的使用方法
map接受JSON和Array
map函数第一个参数是一个Array/JSON(object)类型的数据,第二个参数是一个处理函数
返回值是一个数组
*/
function mapDemo()
{
var personInfo =
{
name:"sheldon",
age:28,
gender:"male",
cellNumber:"15527738495"
}; var result = _.map(personInfo,function(value, key)
{
return value;
}); print(result);
print(result[2]); print("================="); var numberArray = [1,3,2,1,2,3];
result = _.map(numberArray,function(item)
{
return item * item;
}); print(result);
print(result[2]);
} function everyAndSomeDemo()
{
var numberArray = [1,3,2,1,2,3];
var result = _.every(numberArray,function(item)
{
return item > 2;
});
print("所有的元素都大于2: " + result); result = _.some(numberArray,function(item)
{
return item > 2;
});
print("部分元素都大于2: " + result); var boxInfo = {height:true,width:false,length:true};
result = _.every(boxInfo,function(val,key)
{
return val == true;
}); print("箱子的所有指标(长/宽/高)都正确: " + result); result = _.some(boxInfo,function(val,key)
{
return val == true;
}); print("箱子的部分指标(长/宽/高)正确: " + result);
} function maxDemo()
{
var numberArray = [1,3,2,1,2,3]; var maxNumber = _.max(numberArray);
print("max number in array:" + maxNumber); //NOTE: the key should not be length. otherwise the result is infinity
var numberObject = {"height":133,"width":146,"length":122};
maxNumber = _.max(numberObject);
print("max number in JSON(object):" + maxNumber); var numberObject1 = {"height":133,"width":146,"length1":122};
maxNumber = _.max(numberObject1);
print("max number in JSON(object):" + maxNumber);
} function groupByDemo()
{
var scoresInArray = [20, 81, 75, 40, 91, 59, 77, 66, 72, 88, 99]; var result = _.groupBy(scoresInArray,function(item)
{
if(item < 60 )
return "不及格";
else if(item >= 60 && item < 80)
return "合格";
else
return "优秀";
}); for(var key in result)
{
print(key + ":" + result[key]);
} var scoresInObject =
{
"小明":22,
"小张":67,
"小红":45,
"小华":99,
"小贾":85
}; //对object进行分组的时候,只对value进行分组
result = _.groupBy(scoresInObject,function(value)
{
if(value < 60 )
return "不及格";
else if(value >= 60 && value < 80)
return "合格";
else
return "优秀";
}); for(var key in result)
{
print(key + ":" + result[key]);
} } //用洗牌算法随机打乱一个集合:
function shuffleDemo()
{
// 注意每次结果都不一样:
var result = _.shuffle([1, 2, 3, 4, 5, 6]); // [3, 5, 4, 6, 2, 1]
print(result);
} //随机选择一个或多个元素:
function sampleDemo()
{
// 注意每次结果都不一样:
// 随机选1个:
var result = _.sample([1, 2, 3, 4, 5, 6]); //
print(result);
// 随机选3个:
result = _.sample([1, 2, 3, 4, 5, 6], 3); // [6, 1, 4]
print(result);
} //keys()可以非常方便地返回一个object自身所有的key,但不包含从原型链继承下来的:
function keysDemo()
{
function Student(name,age)
{
this.name = name;
this.age = age;
} var xm = new Student("xiaoming",23);
var keysXM = _.keys(xm);// ['name', 'age'] for(var index in keysXM)
{
var key = keysXM[index];
print(key + ":" + xm[key]);
}
} //和keys()类似,values()返回object自身但不包含原型链继承的所有值:
function valuesDemo()
{
function Student(name,age)
{
this.name = name;
this.age = age;
} var xm = new Student("xiaoming",23);
var valuesXM = _.values(xm);// ['小明', 20]
for(var index in valuesXM)
{
print(valuesXM[index]);
}
} //invert()把object的每个key-value来个交换,key变成value,value变成key:
function invertDemo()
{
function Scores(math,english,computer)
{
this.math = math;
this.english = english;
this.computer = computer;
} var testResult = new Scores(66,75,94);
var testResultInverted = _.invert(testResult);
var keysOfTestResult = _.keys(testResult);
var keysOfTestResultInverted = _.keys(testResultInverted); for(var index in keysOfTestResult)
{
var key = keysOfTestResult[index];
print(key + ":" + testResult[key]);
}
print("==============="); for(var index in keysOfTestResultInverted)
{
var key = keysOfTestResultInverted[index];
print(key + ":" + testResultInverted[key]);
}
} //如果我们要复制一个object对象,就可以用clone()方法,它会把原有对象的所有属性都复制到新的对象中:
function cloneDemo()
{
var source =
{
name: '小明',
age: 20,
skills: ['JavaScript', 'CSS', 'HTML']
}; var copied = _.clone(source);
print(copied == source);
print(copied.name == source.name);
print(copied.age == source.age);
//注意,clone()是“浅复制”。所谓“浅复制”就是说,两个对象相同的key所引用的value其实是同一对象:
print(copied.skills == source.skills);
} //isEqual()对两个object进行深度比较,如果内容完全相同,则返回true
//isEqual()对两个object进行深度比较,如果内容完全相同,则返回true
function isEqualDemo()
{
var o1 = { name: 'Bob', skills: { Java: 90, JavaScript: 99 }};
var o2 = { name: 'Bob', skills: { JavaScript: 99, Java: 90 }}; print(o1 === o2); // false
print(_.isEqual(o1, o2)); // true //isEqual()其实对Array也可以比较
o1 = ['Bob', { skills: ['Java', 'JavaScript'] }];
o2 = ['Bob', { skills: ['Java', 'JavaScript'] }]; print(o1 === o2); // false
print(_.isEqual(o1, o2)); // true
} function chainDemo()
{
var numberArray = [1,3,2,1,2,3,2,7,7,8,2];
var result = _.chain(numberArray).filter(function(item)
{
return item%2 == 0;
}).map(function (item)
{
return item*2;
}).value(); print(result);
}
欢迎加入QQ群参与讨论. 422683877
Underscore.js基础入门的更多相关文章
- JS基础入门篇(三十五)—面向对象(二)
如果没有面向对象这种抽象概念的小伙伴,建议先看一下我写的JS基础入门篇(三十四)-面向对象(一)
- JS基础入门篇(二十七)—BOM
虽然上次写到js基础篇(二十四),这次直接写到(二十七).是为了提醒自己中间有几篇没写.特此说明一下啊. 1.window.open() 使用a标签呢,点击一下a标签页面才会跳转,有时候我们需要做的操 ...
- egg.js基础入门
之前一直使用koa, 刚刚接触egg, 做了一些入门的笔记 准备工作 1 首先安装脚手架,,并创建项目. $ npm i egg-init -g $ egg-init egg-demo --type ...
- Nuxt.js 基础入门教程
原文链接 Vue 开发一个单页面应用,相信很多前端工程师都已经学会了,但是单页面应用有一个致命的缺点,就是 SEO 极不友好.除非,vue 能在服务端渲染(ssr)并直接返回已经渲染好的页面,而并非只 ...
- JS基础入门篇(六)— 数据类型
1.数据类型 数据类型:我感觉就是对数据的种类进行分类.就好比把人分为儿童,青少年,中年,老年一样. 基础数据类型: Number(数字),String(字符串),Null(空),Undefined( ...
- gulp.js基础入门
安装 Node 去 nodejs.org 根据系统选择性按照教程安装Node. 创建项目 创建项目文件夹 进入项目文件夹 初始化项目 使用npm命令:npm init,根据提示完成. 安装 Gulp ...
- JS 基础 入门
JS做弹窗效果 //单行注释/*多行注释*/// 网页 标签语言 js语言是脚本语言/* 数据类型: 容器 1.整型 (int) 2.小数类型: float: 单精度的小数: double: ...
- JS基础——入门必备
·首先,来简单的说一下,JS是啥,JS是JavaScript的简写,是 基于浏览器的 基于对象的 事件驱动 脚本语言 ·那么JS有什么用呢?ta可以实现: 表单验证 添加动画效果 动态更改页面内容 A ...
- React.js基础入门
本文主要是针对React的一些demo教程.参考了菜鸟教程中的react教程,做了一些总结.Demo的下载链接是 https://github.com/RealAndMe/react-demo 下面要 ...
随机推荐
- IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)
1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...
- 《一个 Go 程序系统线程暴涨的问题》结论
原文地址:https://zhuanlan.zhihu.com/p/22474724 作者的结论没写好,我来说两句.. 结论: Docker swarm自己有个函数,叫setTcpUserTimeou ...
- 帝国cms内容批量替换
方法一:栏目-其他相关-批量替换字段值 方法二:通过sql替换 UPDATE phome_ecms_news SET body=REPLACE(body,'原来','现在')
- python的编码判断_unicode_gbk/gb2312_utf8(附函数)
python中, 我们平常使用最多的三种编码为 gbk/gb2312, utf8 , unicode. 而python中并没有一个函数来进行 编码的判断.今天,主要对这三种编码进行讨论,并给出区分 ...
- 【视频演示】FireBase链接已有应用&实时数据库的配置与使用
全程无编辑,一镜到底,一帧未减,带上犯傻的时间全部不到31分钟:Firebase链接与基础功能使用如此之简单,跟我一起动手,从零开始链接Firebase吧~注意: 输入声源为笔记本自带麦克风,所以风扇 ...
- IOS照片颠倒分析及PHP服务端的处理
前言: 因朋友的PHP小项目, 而去帮忙解决了一个小问题, 现在来总结概括一下. 也不知道大家在使用和开发的过程中有没有遇到类似的场景, IPhone手机上传照片后, 发现图片方向颠倒了, 甚至各种姿 ...
- jenkins 使用oclint 扫描 oc 代码
jenkins 环境的搭建,在这里不在赘述,下面我们写一写,如何接入oclint. OCLint是一个强大的静态代码分析工具,可以用来提高代码质量,查找潜在的bug,主要针对c,c++和Objecti ...
- [转]恢复 git reset -hard 的误操作
转帖:http://hi.baidu.com/configuration/item/97fddeea252818d0eb34c964 有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 r ...
- React(JSX语法)----JSX拼写
注意:For DOM differences,such as the inline style attribute,check here. // bad: it displays "FIrs ...
- [1]开发准备-使用C#.NET开发基于本地数据缓存的PC客户端
小记:本人是PHPer,对C#.NET的开发只能说看得懂,也写得了功能略简单的PC客户端程序,下面的是本人开发一款名叫“理财速记”的PC客户端软件的全过程记录,期间包括比较繁琐的C#.NET资料查询等 ...