引用类型-Array

xiaoxiao2021-02-28  51

一. 创建数组

构造函数创建 var arr = new Array(); //可传参 var arr1 = new Array(20); //表示数组长度 var arr2 = new Array('red','blue');//表示数组元素 字面量 var arr = [];//空数组 var arr1 = [20];//创建包含一项的数组 var arr2= ['red','blue'];//创建包含两个字符串的数组

二. length属性

可改变,用于设置或返回数组中元素的数目 若设置的值比当前值小,数组将被截断,尾部元素丢失; 若设置的值比当前值大,则新的元素被添加到数组的尾部,它们的值为undefined; 当把一个值放在超出当前数组大小的位置上时,数组就会重新计算其长度值

三. 检测数组(待完善)

instanceof 操作符 :假定全局只有一个执行环境Array.isArray():不管在哪个全局环境中

四. 数组方法

1. push():接收任意数量的参数,逐个添加到数组末尾,并返回修改后数组的长度; 2. pop():删除并返回数组中的最后一个元素; 3. unshift():在数组头部添加任意项并返回数组新长度; 4. shift():移除并返回数组中的第一项; 5. reverse():颠倒数组中元素的个数; 6. sort():默认按升序排列数组项; - 注意:sort()方法比较的是字符串,会调用每个数组项的toString()转型方法 - 可接收一个函数作为参数,sort(func)

arr.sort((value1, value2) => ( value2 - value1; )); - 返回正数:则第一个参数在第二个参数后面; - 返回负数:则第一个参数在第二个参数前面; - 返回0:则两参数相等;

7. splice():功能比较强大的一个数组; - 删除:splice(index, howmany); 其中index表示要删除的第一项的位置,howmany表示要删除的项数;如splice(0,2)表示从第0项开始删除2项; - 插入:splice(index, 0, e1, e2…..ex); 其中index表示起始位置,0表示删除0项,e1,e2…..表示要插入的项; - 替换:splice(index, delNum, e1, e2…..); 表示从index开始删除后面的delNum项,并插入e1,e2等;即将从index开始的delNum项替换为e1,e2……. 8. concat():用于连接两个或多个数组,该方法不会改变现有数组,返回被连接数组的一个副本; - 不传参时:返回当前数组的一个副本; - 传入一个或多个值:这些值被简单的添加到结果数组的末尾; - 传入一个或多个数组:将数组中的每一项都添加到结果数组末尾; 9. toString():返回以逗号分割的字符串; 9. join():把数组中的所有元素放入一个字符串,用指定分隔符进行分隔,默认为逗号; 10. slice():从已有数组中返回选定的元素; 11. indexOf(待查找项,查找起点索引):第二个参数为可选,默认从头开始查找,返回第一个找到的位置; 12. lastIndexOf():同上,默认从末尾最后一个开始往前查找; 13. 迭代方法 - every():传入的函数每一项均满足则返回true; - some():传入的函数只要有一项满足则返回true; - filter():返回满足指定函数条件的项(返回新数组); - map():返回一个新数组,其每一项都是在原始数组的对应项上执行传入函数的结果; - forEach():遍历每一项;

//以上几个迭代方法的参数均为如下函数 (item, index, array) => { //....... }

14.归并方法 - reduce:接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终为一个值。

用法:arr.reduce(callback[, initialValue]);

参数说明: 示例1:数组 arr = [1,2,3,4] 求数组的和

//forEach实现 let sum = 0; arr.forEach((item) => { sum += item; }) //reduce实现,一个直观的感觉就是reduce不用额外声明变量 arr.reduce((pre, curr) => ( pre + curr; ))

示例2:你拿到了这样的数据格式: var arr = [ {name: ‘brick1’}, {name: ‘brick2’}, {name: ‘brick3’} ],希望得到这样的数据格式: ‘brick1, brick2 & brick3’;异常数据格式:[ {name: ‘brick1’} ] 和 空数组传入得到 ‘brick1’ 和 空;

const arr = [ {name: 'brick1'}, {name: 'brick2'}, {name: 'brick3'} ]; (arr) => ( arr.reduce((pre, curr, index, array) => { if(index == 0){ return curr.name; }else if(index == array.length-1){ return pre + ' & '+curr.name; } return pre + ', '+curr.name; }, ''); //注意,这里传入''作为initialValue,既保证了空数组时可以得到空;又保证了递归从数组从第一项开始,函数内部可对第一项作判断;如果不这样传的话,也可在reduce函数内部判断pre,分别判断其是空和对象的时候,不如这个方便; ) reduceRight:语法以及回调函数的规则和reduce方法是一样的,区别就是在与reduce是升序,即角标从0开始,而reduceRight是降序,即角标从arr.length-1开始。

五. 引申

多维数组转换为一维数组 //递归实现 const arr = [1,2,3,[4,5,[6,7,8]],9]; function multiToSingle(arr){ let newArr = []; arr.forEach((item) => { (item instanceof Array) : multiToSingle(item) : newArr.push(item); }); return newArr; }
转载请注明原文地址: https://www.6miu.com/read-85881.html

最新回复(0)