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

JS数组相关

时间:2023-03-27 11:33:20 JavaScript

数组方法join()push()和pop()shift()和unshift()sort()reverse()concat()slice()splice()indexOf()和lastIndexOf()forEach()map()filter()every()some()find()includes()isArray()reduce()和reduceRight()API详解join()//将指定字符分隔的数组转换为字符串//将不改变原来的数组letarr=[1,2,3];letstr=arr.join("-");console.log(str)//1-2-3push()andpop()//push()将里面的内容添加到数组的末尾,返回修改后的长度。//pop()删除数组的最后一项,返回删除的值,并减少数组的长度。//改变原来的数组vararr=[1,2,3];varcount=arr.push(4,5);控制台日志(计数);          //5console.log(arr);           //[1,2,3,4,5]varitem=arr.pop();console.log(item);          //1console.log(arr);          //[1,2,3,4]shift()andunshift()//shift()删除原数组的第一项,并返回删除元素的值;如果数组为空,则返回undefined。//unshift()将参数添加到原数组的开头,并返回数组的长度。//改变原来的数组vararr=["Lily","lucy","Tom"];varcount=arr.unshift("Jack","Sean");console.log(count);              //5console.log(arr);               //[“杰克”、“肖恩”、“莉莉”、“露西”、“汤姆”]varitem=arr.shift();console.log(item);              //Jackconsole.log(arr);              //["Sean","Lily","lucy","Tom"]sort()//sort()将数组中的项从小到大排序//改变原数组,返回排序后的数组让arr=[1,4,23,14,16,33,37];让newArr=arr.sort();console.log(arr);//[1,14,16,23,33,37,4]console.log(newArr);//[1,14,16,23,33,37,4]//另外值得注意的是,比如上面的数组是不是按照你的想法排序的?sort()方法比较字符串,并不会根据值的大小对数字进行排序。要实现这个,就必须要用到一个排序函数//从小到大的排序函数sortNumber(a,b){  returna-b}//从大到小的排序函数sortNumber2(a,b){  返回b-a}让arr=[1,4,23,14,16,33,37]; console.log(arr.sort(sortNumber));//[1,4,14,16,23,33,37]console.log(arr.sort(sortNumber2));//[37,33,23,16,14,4,1]reverse()//reverse()颠倒数组项的顺序//改变原数组vararr=[13,24,51,3];console.log(arr.reverse());    //[3,51,24,13]console.log(arr);         //[3,51,24,13](原数组改变)concat()//concat():给原数组添加参数这个方法会先创建当前数组的副本,然后接收到的参数(参数可以是数字字符串或数组)将被添加到副本的末尾,最后返回新构造的数组。在没有参数传递给concat()方法的情况下,它只是复制当前数组并返回副本。//不修改原数组vararr=[1,3,5,7];vararrCopy=arr.concat(9,[11,13]);vararrCopy2=arr.concat("aaa","bbbb");console.log(arrCopy);            //[1,3,5,7,9,11,13]console.log(arrCopy2);//[1,3,5,7,'aaa','bbbb']console.log(arr);              //[1,3,5,7](原数组未修改)slice()//slice()返回原数组中指定start开始的下标到end之间的新数组项下标。//slice()方法可以接受一个或两个参数,分别是要返回的item的起始位置和结束位置。//在只有一个参数的情况下,slice()方法返回从参数指定的位置到当前数组末尾的所有项。//使用两个参数,此方法返回开始位置和结束位置之间的项目——但不包括结束位置。//不修改原数组vararr=[1,3,5,7,9,11];vararrCopy=arr.slice(1);vararrCopy2=arr.slice(1,4);//arrCopy3设置了两个参数,末尾下标为负数,当有负数时,将负数加上数组长度(6)的值来代替这个位置的数,所以是一个sub-从1到4的数组(不包括在内)。vararrCopy3=??arr.slice(1,-2);//arrCopy4中的两个参数都是负数,所以加上数组长度6,将它们转为正数,所以相当于slice(2,5)。vararrCopy4=arr.slice(-4,-1);控制台日志(arr);       //[1,3,5,7,9,11](原数组没有变化)console.log(arrCopy);     //[3,5,7,9,11]console.log(arrCopy2);    //[3,5,7]console.log(arrCopy3);    //[3,5,7]console.log(arrCopy4);    //[5,7,9]splice()//splice():删除、插入和替换。//删除:指定2个参数:第一项删除的位置和删除多少。//Insert:可以向指定位置插入任意数量的item,只需要提供3个参数:起始位置,0(要删除的item数量)和要插入的item//Replacement:可以插入任意数量ofitems到指定位置的items,同时删除任意数量的items,只需要指定3个参数:起始位置,删除的items数量,插入任意数量的items。插入的项目数不必等于删除的项目数。//改变原来的数组,返回被删除的项,也是一个数组,没有被删除是空数组。vararr=[1,3,5,7,9,11];//删除第一个和第二个值vararrRemoved=arr.splice(0,2);console.log(arr);              //[5,7,9,11]console.log(arrRemoved);          //[1,3]//在第2项后插入两个数字vararrRemoved2=arr.splice(2,0,4,6);console.log(arr);              //[5,7,4,6,9,11]console.log(arrRemoved2);          //[]//将第二项替换为另一项vararrRemoved3=arr.splice(1,1,2,4);控制台日志(arr);              //[5,2,4,4,6,9,11]console.log(arrRemoved3);          //[7]indexOf()andlastIndexOf()//indexOf():接收两个参数:要搜索的item和(可选)表示搜索起始位置的index。其中,从数组的开头(位置0)向后看。lastIndexOf:接收两个参数:要查找的项目和(可选)表示搜索起始位置的索引。其中,从数组的末尾向前看。//返回第一个搜索到的索引vararr=[1,3,5,7,7,5,3,1];控制台日志(arr.indexOf(5));      //2console.log(arr.lastIndexOf(5));   //5console.log(arr.indexOf(5,2));    //2console.log(arr.lastIndexOf(5,4));  //2console.log(arr.indexOf("5"));    //-1,检查类型forEach()//forEach():遍历数组,为每个Item运行给定的函数。该方法没有返回值。参数都是函数类型,默认传参。参数是:要遍历的数组内容,对应的数组索引,数组本身。vararr=[1,2,3,4,5];arr.forEach(function(val,index,a){console.log(val+'|'+index+'|'+(a===arr));});//输出为://1|0|true//2|1|true//3|2|true//4|3|true//5|4|truemap()//map():指的是“映射”,在其上运行给定的函数数组中的每一项,并返回每个函数调用结果的数组。//返回一个新数组vararr=[1,2,3,4,5];vararr2=arr.map(function(item){returnitem*item;});控制台日志(arr2);//[1,4,9,16,25]filter()//filter():“过滤”函数,数组中的每一项运行给定的函数,返回满足过滤条件的数组。vararr=[1,2,3,4,5,6,7,8,9,10];vararr2=arr。filter(function(x,index){返回索引%3===0||x>=8;});控制台日志(arr2);        //[1,4,7,8,9,10]every()//every():判断数组中的每一项是否满足一个条件,只有所有项都满足条件才返回true。vararr=[1,2,3,4,5];vararr2=arr.every(function(x){returnx<10;});控制台日志(arr2);        //truevararr3=arr.every(function(x){returnx<3;});控制台日志(arr3);        //falsesome()//some():判断数组中是否有满足条件的项,只要有满足条件的项,就返回true。vararr=[1,2,3,4,5];vararr2=arr.some(function(x){returnx<3;});控制台日志(arr2);        //truevararr3=arr.some(function(x){returnx<1;});控制台日志(arr3);        //falsefind()//find()方法返回数组中通过测试(函数内判断)的第一个元素的值。//find()方法为数组中的每个元素调用一个函数执行//当满足测试条件时数组中的元素返回true,find()返回满足条件的元素,后续的值将不再调用函数。如果没有符合条件的元素returnundefined//find()为空数组,函数将不会执行。//find()不会改变数组的原始值。vararr=[1,2,3,4,5,6,7,8,9,10];vararr2=arr。查找(函数(x,索引){返回x>5;});安慰。日志(arr2);        //6includes()//includes()方法用于判断一个数组是否包含指定值,如果返回true,否则返回false。//includes(searchElement,fromIndex),includes有两个参数//searchElement,must.要查找的元素值。//来自索引,可选。开始在此索引处查找searchElement。如果为负,则搜索从array.length+fromIndex的索引开始,按升序排列。默认为0。letarr=['baidu','google','taobao'];console.log(arr.includes('baidu'));//trueconsole.log(arr.includes('baidu'),5);//falseisArray()//isArray()方法用于判断一个对象是否为数组。让arr=[1,3,5];让obj={};console.log(Array.isArray(arr))//trueconsole.log(Array.isArray(obj))//falsereduce()和reduceRight()//reduce()方法接收一个函数作为累加器,每个值数组中(从左到右)开始减少,最后计算到一个值。//reduce()可以用作函数compose的高阶函数。//注意:reduce()不会为空数组执行回调函数。//reduceRight()方法的作用和reduce()方法是一样的,不同的是reduceRight()是从数组末尾开始累加数组中的数组项//reduce(fn,[initVal])有两个参数,第一个是函数,必须的,第二个是初始值,不需要varnumbers=[65,44,12,4];//总数是必需的。初始值,或者计算完成后的返回值。//num是必需的。当前元素//numIndex可选。当前元素的索引//可选。当前元素所属的数组对象。functiongetSum(total,num){returntotal+num;}letcount=numbers.reduce(getSum);console.log(count)//125letcount1=numbers.reduceRight(getSum,100);console.log(count1)复制代码//225