array数据类型的详细解读
数组是对象数据类型,只不过是对象数据类型中的一个细分类而已console.log(typeof [1, 2, 3]); -->"object" 定义一个数组有两种方式字面量方式var ary = [45, 56, 67];实例创建var ary = new Array(); console.dir(ary);数组也是有属性名和属性值组成的,只是我们不用写属性名即可,默认属性名是数字,代表当前是数组中的第几个值-->索引0代表第一个值 ary[0]ary[索引] 获取数组中对应的值ary.length 存储的值是当前数组的个数 一般我们都是是用for循环来遍历数组中的每一项,进行相关的操作for (var i = 0; i < ary.length; i++) { var cur = ary[i];//每一次循环获取当前数组中的那一项}
var ary = [12, 23];增加第三项-->往末尾增加一项ary[2] = 34;添加前最后一项的索引是ary.length-1,我们在它的后面添加一项,索引是ary.lengthary[ary.length] = 34; 删除第四项 -->删除数组最后一项delete ary[3];delete ary[ary.length - 1];数组中的length属性是可以修改值的ary.length = ary.length - 1; 或者ary.length -= 1;console.log(ary); 数组常用的方法(记住这些方法的四个维度):1、方法的作用2、方法的参数3、方法的返回值4、原有的数组是否发生了改变 var ary = [12, 23, 56, 67, 78, 89, 91, 13]; 一、数组的增加、删除、修改1、push() 向数组的末尾增加新的元素 参数:要增加的内容(可以是多个值) 返回值:增加内容后数组的长度值 原有数组改变了 var res = ary.push(78, 100); console.log(res); console.log(ary); 2、pop() 删除数组最后一个元素 返回值:删除的那个元素 原有数组改变 var res = ary.pop(); console.log(res); console.log(ary); 3、shift() 删除数组的第一个元素 返回值:删除的那个元素 原有数组改变 var res = ary.shift(); console.log(res); console.log(ary); 4、unshift() 向数组的开头增加新的元素 参数:要增加的内容(可以是多个值) 返回值:增加内容后数组的长度值 原有数组改变了 var res = ary.unshift(100, 200); console.log(res); console.log(ary); 5、splice(n,m) 从索引n开始删除m个元素 返回值:把删除的内容当做一个新的数组返回 原有的数组改变了splice(n) 从索引n开始删除到数组的末尾 --> splice(0) 全删,清空数组 --> splice() 一个都不删除 var res = ary.splice(2, 4); console.log(res); console.log(ary); splice(n,m,x) 从索引n开始,删除m个元素,用x把这个位置填补上 返回值:把删除的内容当做一个新的数组返回 原有的数组改变了 var res = ary.splice(2, 2, "珠峰培训"); console.log(res); console.log(ary); splice(n,0,x) 从索引n开始,一个都不删除,把x添加到索引n的前面 原有的数组改变了 var res = ary.splice(3, 0, "珠峰培训"); console.log(res); console.log(ary); 二、数组的查询var ary = [12, 23, 56, 67, 78, 89, 91, 13];1、slice(n,m) 从索引n开始,找到索引m处(不包含m这一项),把找到的内容当做一个新的数组返回,原有的数组不变slice(n) 从索引n开始找到数组末尾 --> slice(0) 复制一份和原来一模一样的数组(数组的克隆) <--> slice() var res = ary.slice(); console.log(res); console.log(ary); 2、concat() 实现数组的克隆 原有的数组也是不进行改变的 var res = ary.concat(); console.log(res); console.log(ary);concat()本身并不是为了实现数组的克隆,而是实现两个数组的拼接的 var a = [1, 2, 3]; var b = [2, 3, 4]; var res = a.concat(b);//a数组拼接了b数组,最终合并成一个数组 console.log(res); 三、数组转为字符串1、join2、toString 一些常用的但不兼容的方法1、indexOf 不兼容 --> lastIndexOf2、forEach 不兼容3、map 不兼容 四、操作数组的顺序var ary = [12, 23, 56, 7, 78, 89, 91, 13];1、reverse() 将数组倒过来排列 原有的数组改变 var res = ary.reverse(); console.log(res); console.log(ary); 2、sort() 实现数组的排序 原有的数组改变 但是默认情况下只能处理10以内的数字,超过10按照第一个字母排序传递一个参数可实现高级的排序 参数是一个函数,有两个形参a,b,return a-b是升序,return b-a是降序 ary.sort(function (a, b) { return b - a; }); console.log(ary); 数组中冒泡排序思想
var ary = [12, 8, 14, 9, 1]; ary.sort(function (a, b) { console.log(a, b); }); console.log(ary);里面的函数执行了4次12 88 1414 99 1a是每一次的当前项,b是后一项 return a-b; 返回当前项和后一项的差值--> 大于0 小于等于0 冒泡排序的算法思想:当前项和后一项进行比较,如果当前想大于后一项,两者交换位置var ary = [12, 8, 14, 9, 1]; ---> [1,8,9,12,14] 第一轮比较: [8,12,14,9,1] [8,12,14,9,1] [8,12,9,14,1] [8,12,9,1,14] 第一轮两两比较完成后,并没有达到我们的目标值,但是把数组中当前最大的值14 放在了数组的最末尾的位置 第二轮比较: [8,12,9,1,14] [8,9,12,1,14] [8,9,1,12,14] 第三轮比较: [8,9,1,12,14] [8,1,9,12,14] 第四轮比较: [1,8,9,12,14] 每一轮前后比较完成后,都会把当前最大的那个数值,放在数组的末尾的位置;那么一个数组有5项,我最多只需要把四个最大值分别放在末尾就实现了排序;--->我最多比较 ary.length-1 轮 每一轮比较的次数也有规律: 第一轮 4次 --> 不用和自己比,所以最多比较4次,并且在这个轮比较前,还没有往后面放最大的数 第二轮 3次 数组末尾放了一个最大的值 ---> 不用和自己比,最多4次,也不用和末尾的那一个比,只剩3次了 第三轮 2次 数组末尾放了两个最大的值 ---> 不用和自己比,最多4次,也不用和末尾的那两个比,只剩2次了 ...... i是代表轮数 i最多循环ary.length-1次即可 i=0 第一轮 比较 4次 5-1不用和自己比 -0末尾还没有最大的值 i=1 第二轮 比较 3次 5-1不用和自己比 -1末尾有一个最大的值 i=2 第三轮 比较 2次 5-1不用和自己比 -2末尾有两个最大的值 j代表每一轮的次数 j最多循环 ary.length-1-i 次 ary[j]当前值 ary[j+1]是后一项的值 如果当前项的值大于后一项的值的话,两者交换位置 var a=12; var b=13; a和b交换位置,如何的交换 var c=null; c=a; a=b; b=c; 冒泡排序 function sortAry(ary) {
for (var i = 0; i < ary.length - 1; i++) {//i是比较的轮数 for (var j = 0; j < ary.length - 1 - i; j++) {//j是每一轮比较的次数 if (ary[j] > ary[j + 1]) {//如果当前的值大于后一项的值,交换位置 var temp = null; temp = ary[j]; ary[j] = ary[j + 1]; ary[j + 1] = temp; } } } return ary;}var ary = [12, 23, 45, 25, 12, 15, 17, 18, 1, 2, 5, 4, 8, 19];var res = sortAry(ary);console.log(res); 数组去重
var ary = [1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1];var obj = {};for (var i = 0; i < ary.length; i++) { var cur = ary[i]; if (obj[cur] == cur) { //ary.splice(i, 1); ary[i] = ary[ary.length - 1]; ary.length -= 1; i--; } else { obj[cur] = cur; }}obj = null;console.log(ary); 函数数据类型
function是引用数据类型中的一种,是一个函数数据类型,我们把function称之为一个函数,或者一个方法,在或者一个功能 function由两部分组成:定义(把需要实现的功能预先处理好)、执行(需要的时候执行这个方法即可,并且根据需要可以多次执行) //制定一个约会的方法(计划) function dating() { //1、取钱 10000 //2、制定路线方案 爬长城--海洋馆--欢乐谷--国家大剧院--俏江南吃饭--回家 } //执行计划 dating(); dating();
不知道执行sum的时候,会传递几个数字,我们不管它传递几个,有几个我就处理几个console.dir(arguments); arguments是每一个函数天生自带的存储传递参数值的集合,以数字作为索引,索引从0开始;length属性代表传递进来参数值的个数;我们把arguments称之为类数组(对象数据类型的)arguments[0] 第一个参数的值 arguments[1]第二个参数的值 arguments[n]第n+1个参数的值arguments.length 有多少个参数function sum() { var total = 0; for (var i = 0; i < arguments.length; i++) { //i=0 拿第一个参数值 arguments[0] //i=1 拿第二个参数值 argumnets[1] //arguments[i] 就是每一次循环的时候,拿出来的对应的参数值 var cur = Number(arguments[i]); if (!isNaN(cur)) { total += cur; } } return total;}var total = sum(1, 2, 3, 4, 5, 6, 7, 8, 9);console.log(total); Date类型
时间: 2024-11-05 16:39:42