摘要:基本概念可以使用关键字创建。调用时传入一个数组和一个函数,内部过程遍历数组,并对数组中的每一项调用函数,调用函数的时候会传入两个参数,这个数组有项,传次,每次不一样的不一样的。会按照升序排列数组。
Array基本概念
Array可以使用new关键字创建 。
var a = new Array(1,2,3,4); === var a = Array(1,2,3,4); === var a = [1,2,3,4];
如果Array接受一个参数,那么这个参数是length的长度;
如果Array接受多个参数,那么就不是length,是一个普通数组。
var a = Array(3) //会生成一个length=3的数组 var a2 = Array(3,3) //[3,3]
数组是特殊的对象,用对象创建数组(如下代码),那和直接创建数组的区别是:用对象创建的数组没有数组的原型(公有属性),也就是说用对象创建数组,它的__proto__直接指向Object的原型,跳过Array的原型。一张图说明prototype和__proto__的区别
var a = [1,2,3]; var obj = { 0:1, 1:2, 2:3, length:3};forEach、map、filter、reduce
forEach接受一个函数,这个函数接受三个参数(value,key,array),value是array的元素,key是array的索引,array是forEach正在操作的数组(可选)。
如果自己创建一个forEach函数会怎么写呢?
先自己创建一个forEach函数,它接收两个参数(array,fn),array是数组,fn是函数;然后在内部遍历array,同时调用fn函数,并传入两个参数(value,key)array的第一项是value,array的索引是key。
function forEach(array,fn){ for(var i = 0; i < array.length; i++){ fn(array[i],i); } } forEach(["aa","bb","cc","dd","ee","ff"].function(value,key){ console.log(value,key); } /* aa 0 bb 1 cc 2 dd 3 ee 4 ff 5 */ })
调用foreach时传入一个数组和一个函数,内部过程:遍历数组,并对数组中的每一项调用函数,调用函数的时候会传入两个参数(value,key),这个数组有6项,传6次,每次不一样的value不一样的key。
再来看forEach这个API(如下代码) ,它接受一个函数,这个函数接受两个参数(value,key),那么它为什么只接受一个函数作为参数了,数组去哪里了?
var a = ["aa","bb","cc","dd","ee","ff"]; a.forEach(function(value,key){console.log(value,key)});
看一下a.forEach内部过程。首先创建一个obj的对象,它内部没有forEach这个方法,在外面给它强行添加forEach,然后就像普通对象一样调用forEach就可以了。
var obj = { 0:"a", 1:"b", length:2 }; obj.forEach = function(fn){ for(var i = 0; i < this.length; i++){ fn(this[i],i); } } obj.forEach(function(value,key){console.log(value,key)});
forEach遍历数组每一项,map和forEach的区别是map有返回值。filter有条见的筛选。
先调用filter筛选出偶数,再调用map乘上2,得出结果
var a = [1,2,3,4,5,6,7,8,9]; a.filter(function(value){ return value % 2 === 0 }).map(function(value2){ return value2 * value2; }); // [4,16,36,64]
用reduce代替map和filter
var a = [1,2,3,4,5,6,7,8,9] a.reduce(function(arr,n){ arr.push(n*2); return arr; },[]); //[2,4,6,8,10,12,14,16,18] a.reduce(function(arr,n){ if(n % 2 === 0){ arr.push(n); } return arr; },[]); //[2,4,6,8,10]sort重排序方法
reverse反向排序数组项,原数组也被逆序了。
sort会按照升序排列数组。
sort可以接受一个比较函数作为参数,可以实现降序排列
var students = ["小明","小红","小花"]; var scores = { 小明: 59, 小红: 99, 小花: 80 }; students.sort(function (value1,value2){return scores[value2] - scores[value1]});
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/94956.html
摘要:原始缓冲区的创建通过这个构造函数可以创建一个原始缓冲区从控制台可以看到实例拥有一个的属性,用于获取的,一个只有以及支持的方法,用于对长度进行截取操作。所有数组类型的长度均固定。 本文同步自我的博客园:http://www.cnblogs.com/hustskyking/ 相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本...
摘要:反正就是相反的意思了异或当两者中只有一个那么结果才为。将指定根据的标识转换成为进制。当创建实例的构造函数时,内部会同时创建一个用来作为数据的存储。不过,根据上面的构造函数上看,其实,可以将一整个拆成不同的进行读取。 Web 进制操作是一个比较底层的话题,因为平常做业务的时候根本用不到太多,或者说,根本用不到。 老铁,没毛病 那什么情况会用到呢? canvas websocket fi...
阅读 3247·2023-04-26 02:27
阅读 2150·2021-11-22 14:44
阅读 4118·2021-10-22 09:54
阅读 3210·2021-10-14 09:43
阅读 764·2021-09-23 11:53
阅读 12811·2021-09-22 15:33
阅读 2720·2019-08-30 15:54
阅读 2700·2019-08-30 14:04