js函数总结
最近要经常写一些Js代码,总看到同事能使用js高级函数写出比较简洁的js代码,挺羡慕的,于是就花了一些专门时间来学习。
forEach、map、reduce
我就不喜欢一上来就给出语法来,先来一个例子:
- 问题:给定数组 arr = [1,2,3,4] ,求数组的和
forEach 实现
var arr = [1,2,3,4],
sum = 0;
arr.forEach(function(e){sum += e;}); // sum = 10 just for demo
仅仅得到一个sum值
map 实现
var arr = [1,2,3,4],
sum = 0;
arr.map(function(obj){
sum += obj;
return obj*2;
});//return undefined array. sum = 10 just for demo
可以得到sum值,同时返回与原始数组相同长度的新数组,如果map中的函数没有return,返回的数组中的元素全是undefined。
map=映射,map就是通过对原数组每个元素调用参数函数进行处理,保存处理的结果为新数组。
reduce实现
var arr = [1,2,3,4];
arr.reduce(function(pre,cur){return pre + cur}); // return 10
reduce本意为减少,
实例中的三个方法的总结:
- forEach 方法是将数组中的每一个值取出来,再做一些程序员想让他们做的事情
- map 方法 是将数组中的每一个值取出来,放入一个方法中做一些程序员想让他们做的事情后,再返回一个新的数组
- reduce 方法 将数组中的每一个值与前面的被返回相加的总和(初试值为数组的第一个值或者initialValue)
slice、splice、split、concat、join
这其中的slice和splice真的太像太像了,很容易搞混。
slice
slice是指定在一个数组中的元素创建一个新的数组,即原数组不会变。
设计领域说的切片一般就是指slice,想象一下对一份设计稿进行切片,不会修改原始设计稿。
2个参数分别为起点与结束点,重要的是新数组的元素到结束点之前结束,即不包括结束点。
var color = new Array('red','blue','yellow','black');
var color2 = color.slice(1,2);
alert(color); //输出 red,blue,yellow,black
alert(color2); //输出 blue;注意:这里只有第二项一个值
由于它有不改变原数组的特性,slice(0)可以拷贝一个简单数组,不过要注意是浅拷贝而不是深拷贝,在数组元素为对象的情况下,修改新数组中此对象的元素值,原数组中此对象也对应修改。
var color = new Array('red','blue','yellow','black');
var color2 = color.slice(1,2);
alert(color); //输出 red,blue,yellow,black
alert(color2); //输出 blue;注意:这里只有第二项一个值
var a1=[["1","2","3"],"2","3"];
var a2 = a1.slice(0);
a2[0][0]=9;
a1[0][0]; //输出9
splice
splice能够实现对数组元素的删除、插入、替换操作,返回值为被操作的值。替换其实就是先删除,再插入。
splice本意是胶接,粘接(注意胶接/粘接的对象就是片状物)。这里引申为删除、插入、替换,有点不好记,可以理解高级版的slice切片,不仅可以切(删除),还是进行自由组合式的插入与替换。
三个参数:
1、起点,从数组第几个开始(从0开始算,包含它)
2、长度,对数组删除的长度(可以为0,即不删除)
3、添加的内容,可以是多个(先删除后添加,先添加后删除不符合直觉。)
返回值是被删除的元素,改变原数组。
也可以理解为粘接两个数组,即原始数组与新添加的多个内容组成的数组;不只是首尾粘接(第一参数>=原始数组长度,第2参数为0的情况), 还可以在原始数组的中间粘接,这种粘接就要先断开连接,一种情况是只断开一个位置,那么就只有插入功能,如果断开两个位置,那么这个位置的之间的就可以不要了(即删除),再插入新的数组(等同于替换)。所以实现删除、插入、替换操作的函数被命名为splice也不要奇怪。因为是粘接,改变原数组也不奇怪。
splice删除: color.splice(1,2) (删除color中的第1、2两项,返回包含第1、2两项的数组);
splice插入: color.splice(1,0,'brown','pink') (在color键值为1的元素前插入两个值);
splice替换: color.splice(1,2,'brown','pink') (在color中替换1、2元素——其实就是先删除再在相同的位置添加);
var color = new Array('red','blue','yellow','black');
var color2 = color.splice(2,3,'brown','pink');
alert(color); // red,blue,brown,pink
alert(color2); // yellow,black
split
split() 方法比较简单,适用于字符串,用于把一个字符串分割成字符串数组
str="hello!how!are!you?"
arr2=str.split("!");
alert(arr2); //hello,how,are,you?
alert(arr2.length) //4
concat
concat()
是拼接两个数组,具体是先给当前数组创建一个副本,然后将接收到的参数添加到这个副本(数组)的末尾,最后返回一个新的数组。
可以理解为特殊的splice,只能首尾粘接,另外要强调的是不会修改原数组。
注意使用slice和concat对对象数组的拷贝,整个拷贝还是浅拷贝。
join
join() 方法用于把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔的。默认使用逗号作为分隔符。
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
console.log(arr.join());
输出:George,John,Thomas
向数组中插入一个元素
向现有数组中插入一个元素是经常会见到的一个需求。你可以:")向现有数组中插入一个元素是经常会见到的一个需求。你可以:
使用push
将元素插入到数组的尾部;
var arr = [1, 2, 3, 4, 5];
arr.push(6);
使用unshift
将元素插入到数组的头部;
var arr = [1, 2, 3, 4, 5];
arr.unshift(0);
使用splice
将元素插入到数组的中间;(这个其实头部,中间,尾部都可以)。
var items = ['one', 'two', 'three', 'four'];
items.splice(items.length / 2, 0, 'hello');
这三个方法都修改原数组,如果仅仅是插入到尾部或者头部,还有更快的方法:
arr[arr.length] = 6; // 43% faster in Chrome 47.0.2526.106 on Mac OS X 10.11.1
[0].contact(arr); //98% faster in Chrome 47.0.2526.106 on Mac OS X 10.11.1
参考:
js函数总结的更多相关文章
- 3.3 js函数
1.函数语法: 函数声明的方式:function 函数名(参数1,参数2-){//函数体;}函数调用:函数名(参数1,参数2-); 函数内不一定都指定返回值. 如果需要指定返回值,可用 return ...
- Js函数function基础理解
正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...
- js函数表达式和函数声明的区别
我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ...
- 通用js函数集锦<来源于网络> 【二】
通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json ...
- 通用js函数集锦<来源于网络/自己> 【一】
通用js函数集锦<来源于网络/自己>[一] 1.返回一个全地址2.cookie3.验证用户浏览器是否是微信浏览器4.验证用户浏览器是否是微博内置浏览器5.query string6.验证用 ...
- 100多个基础常用JS函数和语法集合大全
网站特效离不开脚本,javascript是最常用的脚本语言,我们归纳一下常用的基础函数和语法: 1.输出语句:document.write(""); 2.JS中的注释为//3.传统 ...
- JS函数
1.document.write(""); 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document->html->(head,body)4.一个浏 ...
- js函数和运算符
函数是由事件驱动或者它被调用时执行可重复使用的代码块. <script> function myFunction(){ Alert(“hello World!”): } </scri ...
- JavaScript学习03 JS函数
JavaScript学习03 JS函数 函数就是包裹在花括号中的代码块,前面使用了关键词function: function functionName() { 这里是要执行的代码 } 函数参数 函数的 ...
- JSF页面中使用js函数回调后台bean方法并获取返回值的方法
由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统.详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的, ...
随机推荐
- 转: Github上关于iOS的各种开源项目集合
https://blog.csdn.net/jiashaoying/article/details/79079500 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. ...
- sshd使用
sshd服务 1.sshd介绍 sshd为secure shell的简称:可以通过网络在主机中开机shell的服务 连接方式(在客户端):ssh username@ip #文本模式 ...
- python练习题--计算总分平均分操作excel
''' 有一个存着学生成绩的文件,里面存的是json串,json串读起来特别不直观,需要你写代码把它都写到excel中,并计算出总分和平均分,json格式如下 { "1":[&qu ...
- VMware 虚拟化编程(14) — VDDK 的高级传输模式详解
目录 目录 前文列表 虚拟磁盘数据的传输方式 Transport Methods Local File Access NBD and NBDSSL Transport SAN Transport Ho ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_6_练习_序列化集合
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_8_字节输入流_InputStream类&FileInputStream
inputStream
- 《图解设计模式》读书笔记8-3 STATE模式
目录 State模式 示例程序 实现的功能 不使用&使用状态模式对比 示例程序的类图 代码 角色和类图 角色 类图 拓展思路 分而治之 依赖于状态的处理 谁来管理状态迁移 易于增加新状态 实例 ...
- requests模块(请求接口)
下面分别是get,post,入参json,添加cookie,添加header,上传/下载文件 的接口请求举例: import requests #导入模块 #1.发get请求 url = 'htt ...
- MySQL使用Navicat远程连接时报错1251
1.报错信息 client does not support authentication protocol requested by server:consider upgrading MySQL ...
- DP---DAG、背包、LIS、LCS
DP是真的难啊,感觉始终不入门路,还是太弱了┭┮﹏┭┮ DAG上的DP 一般而言,题目中如果存在明显的严格偏序关系,并且求依靠此关系的最大/最小值,那么考虑是求DAG上的最短路或者是最长路.(据说 ...