当前位置: 首页 > Web前端 > HTML5

JS数组

时间:2023-04-05 15:29:26 HTML5

摘要最近学习了JS数组的基础知识,这里总结一下,包括js数组的属性和方法,js数组经常遇到的一些问题,小编查阅了一些网上的知识,学习了关于数组的东西有已经列出来了,希望大家多多指点!数组属性length长度属性表示数组的长度,即数组中元素的个数。JavaScript数组的长度属性是可变的。当length属性设置大了,实际上整个数组的状态并没有改变,只是length属性变大了;当length属性设置的小于原来的时候,原来数组中索引大于等于length的元素的值全部丢失。原型返回对对象类型原型的引用。原型属性对所有对象都是通用的。一般用于给数组实例添加方法。构造函数表示创建对象的函数。说明:constructor属性是所有具有原型的对象的成员。constructor属性包含对构造特定对象实例的函数的引用。基本操作Createanarray//创建数组实例vararr=[];//创建空数组vararr=[1,"{1,2}","string"];//创建数组并赋值值vararr=newArray();//创建一个空数组[]vararr=newArray(5);//创建一个长度为5的数组[undefined,undefined,undefined,undefined,undefined]vararr=newArray(1,2,3,4,5);//创建一个数组并赋值[1,2,3,4,5]vararr=Array.of(7);//创建一个数组并赋值[7]vararr=Array.属于(1、2、3);//创建一个数组并赋值[1,2,3]检测数组//判断一个对象是否为数组vararr=[1,8,9];/*方法1instanceof是Java,一个二元运算符(operator),和==,>,<是一类东西,它的作用是判断左边的对象是否是右边类的实例,返回boolean类型的数据*/if(arrinstanceofArray){}/*方法二prototype属性让你可以给对象添加属性和方法*/if(Object.prototype.toString.call(arr)=='[objectArray]')}{}//方法三这是最常用的方法if(Array.isArray(arr)){}/*方法四constructor属性返回对创建这个对象的数组函数的引用。Construction表示类中的一个构造方法。该方法封装了Class定义*/if(arr.constructor==Array){}Array方法①isArray()Array.isArray(obj)检查对象是否为Array(数组),如果是则返回true,否则返回false。②from()Array.from(arrayLike,mapFn,thisArg)该方法从类似的数组或可迭代对象中创建一个新的数组实例。参数arrayLike是一个类数组对象或可遍历对象,你想把它转换成一个真正的数组。mapFn是可选参数。如果指定了此参数,则最终生成的数组将在返回之前由此函数处理。thisArg是一个可选参数,就是执行mapFn函数时this的值。所谓的类数组对象只有一个本质特征,那就是必须有一个length属性。因此,任何具有length属性的对象都可以通过Array.from方法转换为数组。请看下面的小例子:vararrayLike={0:'a',1:'b',2:'c',length:3}vararrayLike2={length:3}varstr='abcd'varnewArray=Array.from(arrayLike)//['a','b','c']varnewArray2=Array.from(arrayLike2)//[undefined,undefined,undefined]varnewArray3=Array.from(str)//['a','b','c','d']console.log(newArray);console.log(newArray2);console.log(newArray3);③of();Array.of(item,.....)此方法用于创建数组实例。使用此方法代替Array()或newArray()。Array.of()和Array构造函数之间的区别在于对整数参数的处理:Array.of(7)创建一个包含单个元素7的数组,而Array(7)创建一个包含7个未定义元素的数组。例如:vara1=Array(7);vara2=Array(1,2,12);vara3=Array.of(7);vara4=Array.of(1,2,12);console.log(a1);console.log(a2);console.log(a3);console.log(a4);Array实例方法数组转换①将数组转换为字符串Array.join(separator);。数组转字符串,首先将数组中的每一个元素都转成一个字符串,然后使用分隔符将它们连接在一起。分隔符分隔符默认为逗号“,”。如果你想没有间隔地链接,你可以使用一个空字符串作为分隔符:见下面的例子:vararr=[1,2,3,4,5]//defaultsymbol","vara1=arr.join();//1,2,3,4,5//自定义符号"|"vara2=arr.join('|')//"1|2|3|4|5"//没有符号,使用一个空字符串vara3=arr.join("")//12345console.log(a1);console.log(a2);console.log(a3);②将字符串转换为数组a.split();vararr=[1,2,3,4,5]//arr转成字符串赋值给avara=arr.join();//将a转成数组,用","隔开varb=a.split(",");console.log(b);Stack方法(pushpop)Array.push(item...)向数组末尾添加一个或多个新元素并返回数组的新长度。vararr=["Orange","Apple"];vara=arr.push("banana","Mango");console.log(a);//返回值长度为4Array.pop()去掉最后一个一个元素并返回该元素值。vararr=["Orange","Apple"];vara=arr.pop();console.log(a);//取出最后一个元素并返回最后一个值Apple队列方法(unshiftshift)Array.unshift(物品...);向数组开头添加一个或多个新元素,数组中的元素自动后移,并返回数组的新长度。vararr=["Orange","Apple"];vara=arr.unshift("banana");console.log(a);//返回新数组的长度为3Array.shift();移除第一个元素并返回元素值,数组中的元素自动向前移动。如果数组为空,它将返回undefined。shift通常比pop慢得多。vararr=["Orange","Apple","banana"];vararr1=[];vara1=arr1.shift();vara2=arr.shift();console.log(a1);//空数组returnundefinedconsole.log(a2);//去掉第一个元素并返回该元素","banana"];vara=arr.reverse();console.log(a);Array.sort()对数组进行排序,默认为升序。默认情况下,sort将数组的内容作为字符串进行排序,因此默认的排序规则在对数字进行排序时会出现错误。看看下面的例子是怎么错的:vararr=[2,4,10,6,8,20];vara=arr.sort();console.log(a);解决这种按字符串排序的方法是带一个比较函数来排序,代替原来默认的比较方式。比较方法接受两个参数,如果两个参数相等则返回0,如果第一个参数在前则返回负数,如果第二个参数在前则返回正数:vararr=[2,4,10,6,8,20];vara=arr.sort(function(a,b){returna-b;});console.log(a);操作方法(concat,slice,splice,copyWithin,fill)Array.concat(啊);该方法生成一个arr的潜在副本,并附加多个数组(或字符串,或数组和字符串的混合)形成一个数组,并返回连接的新数组。vara=[1,2,3];varb=["string"];vararr=a.concat(b);console.log(arr);Array.slice(start,end)截取数组,如果没有end,则输出start后的所有元素,这里遵循数学思想(左闭右开),即不包括end------[)vara=[1,2,3];varb=["string"];vararr=a.concat(b);vararr1=arr.slice(1,3);console.log(arr1);Array.splice(start,deleteCount,item...),此方法从数组中删除一个或多个元素,并将新项插入到删除元素的起始位置。参数start是移除元素的起始位置,deleteCount是要移除的元素个数,item是要插入的元素。它返回一个包含已删除元素的数组。①添加一个新元素varfruits=["Banana","Orange","Apple","Mango"];//在第三个元素的位置插入一个新元素fruits.splice(2,0,"Lemon","Kiwi");console.log(fruits);②删除一个元素并添加一个新元素varfruits=["Banana","Orange","Apple","Mango"];//从第二个位置开始移除下两个元素并将新元素添加到第二个位置fruits.splice(1,2,"Lemon")console.log(fruits);Array.copyWithin(target,start,end)target必须有,复制到指定target的索引位置(数据被替换的位置),start可选,元素复制的起始位置,end为停止复制的索引位置,默认为Array.length和返回值是数组varfruits=["Banana","Orange","Apple","Mango","Kiwi","Papaya"];//将数组的前两个元素复制到第三个和第四个位置,这里也是按照左闭右开的思路,即strat=0,end=2这样理解[0,2)fruits.copyWithin(2,0,2);console.log(fruits);Array.fill(value,start,end)fill()方法用于将数组的元素替换为固定值,value为必填,start可选,开始填充的位置,end可选,表示停止填充的位置(默认为Array.length),返回数组vara=[1,2,3,4,6];console.log(a.fill(5,2,4));locationmethod(indexOf,lastIndexOf,includes)A??rray.indexOf(item,start)item是必须查找的元素,start可选,指定字符串中的起始位置,合法值为0到array.length-1,如果没有这个值,从第一个词开始字符,返回值为Numbervararr=["Banana","Orange","Apple","Mango","Kiwi"];vara=arr.indexOf("Orange");console.log(a);//返回值为1Array.lastIndexOf(item,start)类似于indexOf。唯一的区别是它倒数。strat的默认值为array.length-1。注意,该方法将查找项与数组中的每一项进行比较时,会使用全等运算符(===),即要查找的项必须严格相等vararr=["Banana","Orange","苹果","芒果","猕猴桃"];vara=arr.lastIndexOf("猕猴桃");console.log(a);//返回值为4Array.includes(searchElement,fromIndex)includes()方法用于判断一个数组是否包含指定值,如果包含则返回true,否则返回false。fromIndex是可选的,用于从此索引开始搜索searchElement。如果为负,则搜索从array.length+fromIndex的索引开始,按升序排列。默认为0。vararr=["香蕉","橙子","苹果","芒果","猕猴桃"];vara=arr.includes("Apple",-2);//如果fromIndex为负数,那么数组arr.length+fromIndex的总长度就是我们要从这个位置开始检索的当前位置console.log(a);//returnfalseiterationmethod(every,some,filter,forEach,map,find,findIndex,entries,keys,values)Array.every(function(currentValue,index,arr),thisValue)该方法用于检索数组中的所有元素是否都满足某个条件,如果满足则返回true,其余元素不需要继续测试,否则为falsevararr=[18,16,17,20];vara=arr.every(function(item){returnitem>18;});console.log(a);//returnfalseArray.some(function(currentValue,index,arr),thisValue)该方法用于检索数组中的元素是否满足某个条件,满足则返回true,其余元素不需要继续测试,不满足则返回falsevararr=[18,16,17,20];vara=arr.some(function(item){returnitem>18;});console.log(a);//returntrueArray.filter(function(currentValue,index,arr),thisValue)对数组中的每一项运行给定的函数并返回函数返回true的项目数组vararr=[18,16,17,20];vara=arr.filter(function(item){returnitem>17;});console.log(a);//检索后返回一个新数组Array.forEach(function(currentValue,index,arr),thisValue)对数组中的每一项运行给定的函数,该方法的返回值未定义;array.map(function(currentValue,index,arr),thisValue)在数组中的每一项上运行给定的函数并返回每个函数调用的数组vararr=[4,16,25,36];vara=arr.map(function(item){returnMath.sqrt(item);});console.log(a);//返回数组元素的平方根Array.find(function(currentValue,index,arr),thisValue)该方法对数组的所有成员依次执行函数,直到第一个成员找到返回值为真,然后返回成员如果没有符合条件的成员,返回undefinedvararr=[4,16,25,36];vara=arr.find(function(item){returnitem==25;});console.log(a);//返回找到的成员25Array.findIndex(function(currentValue,index,arr),thisValue)这个方法和arr.find()类似,在数组中的成员上执行函数turnuntil查找第一个返回true的成员并返回该成员的索引。如果没有符合条件的成员,返回-1vararr=[4,16,25,36];vara=arr.findIndex(function(item){returnitem==25;});console.log(a);//返回找到的成员的索引值2Array.entries()Array.keys()Array.values()这三个方法都返回一个新的ArrayIterator对象,可以用于。..of循环遍历,不同的是keys()是键名的遍历,values()是键值的遍历,entries()是键值对的遍历Merge方法(reduce,reduceRight)Array.reduce(function(total,currentValue,currentIndex,arr),initialValue)reduce()方法接收一个函数作为累加器,数组中的每个值(从左到右)开始减少,最后计算到一个价值vararr=[12,20,10];vara=arr.reduce(function(total,item){returntotal+item;});console.log(a);//返回sum的结果为42reduceRight()方法的作用和reduce()方法是一样的,不同的是reduceRight()是累加从数组末尾开始的数组vararr=[12,20,10];vara=arr.reduceRight(function(total,item){returntotal+item;});console.log(a);//返回sum的结果为42