工作半年来,作为一名初级前端,在js上跟数组打交道最多。经常用到一些它的基础方法来处理数据,但是有时候会混淆其用法以及返回值,导致每次不清楚时再进行打印求证或搜查方法。于是就想整理下来每次可以查看,而且随着使用可以在此基础上再丰富之。因此,简易版先出啦。
一.按照改变数组长度分类
1.增加长度
1.1 push()
let arr = [1,2];
arr.push(3);
let len = arr.push(4,5)
console.log(arr.length,arr,len);push()在数组末尾添加项,返回修改后数组的长度。
1.2 unshift()
let arr = ['blue'];
arr.unshift('green');
let len = arr.unshif('red','yellow');
console.log(arr.length,arr,len);unshift()方法在数组前添加任意项,并返回新数组的长度(IE8以后版本)。
1.3 splice()
let arr = ['a','d','e'];
let len = arr.splice(1,0,'b','c');// 1=起始位置 0=要删除的项数(不为0时可做替换功能,见2.4) 后面的参数是要插入的任意项
console.log(arr,len);splice()方法可以作为增加项数的方法使用,在指定位置插入任意项数的项。
2.减少长度
2.1 pop()
let arr = [1,2,3,4,5,6];
arr.pop();
let item = arr.pop();
console.log(arr,item);pop()方法从数组末尾移除最后一项,然后返回移除的值。
2.2 shift()
let arr = [1,2,3,4,5,6];
arr.shift();
let item = arr.shift();
console.log(arr,item);shift()方法从数组开头移除第一项,然后返回移除的值。
2.3 slice()
let oprateArr = [1,2,3,4,5,6];let arr1 = oprateArr.slice(1);let arr2 = oprateArr.slice(1,4);let arr3 = oprateArr.slice(-4,-1);let arr4 = oprateArr.slice(4,-5);
console.log(arr1)//[2,3,4,5,6] 只有一个参数条件下,会返回从指定位置到当前数组末尾的所有项console.log(arr2)//[2,3,4] 会返回起始位置到结束位置之间的项-不包含结束未知的项console.log(arr3)// 2,5 == (-4+6 , -1+6) 负数是需要加上数组长度来确定 console.log(arr4)//如果起始位置大于结束位置,则返回空数组slice() 会根据当前数组的一个项或者多个项创建一个新数组,接收2个参数,
[rule-1]只有一个参数,则返回从指定位置开始到结束位置的项,
[rule-2]2个参数的话,从起始项至结束项(不包含结束项)的所有项,
[rule-3]包含负数的话,负数加上数组长度来确定,
[rule-4]如果起始位置小于结束位置,返回空数组。
2.4 splice()
let arr = [1,2,3];
let removed = arr.splice(0,1);
// 删除方法需要指定两个参数,第一个参数是要删除的第一项的位置,第二个参数是要删除的项数,
let item = arr.split(1,0);
//如果没有要删除的数,返回空数组。
console.log(arr,removed)
console.log(item)splice()方法可以删除任意项,指定两个参数即可,要删除的第一项的位置以及要删除的项数。
其实.splice()可以做3种使用:删除,插入,替换
前两种可以算是增减数组长度明确的方法,而替换可以说改变数组长度更灵活(可长可短)的方法。
替换方法在splice()增加方法基础上使要删除的位置不为0即可。
二.位置方法
1.1 indexOf()
1.2 lastIndexOf()
let arr = [1,2,3,4,5,4,3,2,1] ;
console.log(numbers.indexOf(4)) // 3 从数组开头找到的第一个索引值
console.log(numbers.lastIndexOf(4))//5 从数组末尾开始找到的第一个索引值 三.迭代方法
每个方法都接收两个参数:要在每一项上运行的函数,和(可选的)运行该函数的作用于对象-影响this的值
函数会接收3个参数:数组项的值,该项在数组中的位置,和数组对象本身
every() 方法会对数组中每一项运行给定函数,如果对每一项都返回true,则返回true
some() 方法会对数组中每一项运行给定函数,如果对任意一项返回true,则返回 true
filter()方法会对数组中每一项运行给定函数,返回会返回true的项组成的数组
map() 方法会对数组中每一项运行给定函数,返回每次函数调用的结果组成的数组
foreach()方法会对数组中每一项运行给定函数,没有返回值
let sons = [1,2,3,4,5,4,3,2,1];
let everyRes = sons.every(function(item,index,arr){ return item>2})
console.log(everyRes)
//falselet
someRes = sons.some((item) => item>2)
console.log(someRes)
//truelet
filterRes = sons.filter((item) => {return item>2})
console.log(filterRes)
//[3,4,5,4,3]
let mapRes = sons.map((item) => {return item>2})
console.log(mapRes)
//[false,false,true,true,true,true,true,false,false]
sons.forEach(element => { console.log(element);});四.重排序方法
2.sort()排序 可接受函数
let sortArr1 = [1,10,15,5];
sortArr1.reverse();alert(sortArr1)//反转数组项的顺序sortArr1.sort();
alert(sortArr1);//[1,10,15,5]
//sort()会调用每个数组项的toString()方法,按照升序来排序,因此15排在5前面
//sort()会接受一个比较函数作为参数,决定哪一个参数在前面,比较函数接受两个参数,如果第一个参数在第二个参数之前应该返回负数(升序)