数组方法总结(栈、队列、排序、操作)
一:数组增减
1.push:往数组的末尾添加元素,方法返回的是最新数组长度。
2.pop:删除数组的最后一项,方法返回的是被删除的项。
3.shift:删除数组的第一项,方法返回的是被删除的那一项。
4.unshift:往数组的开头添加元素,方法返回数组最新长度。
let corlors = new Array() //创建一个数组 let count = colors.push("red","green") //推入两项 console.log(count) //2 count = colors.push("black") //再推入一项 console.log(count) //3 let item = colors.pop() // 取得最后一项 console.log(item) //black console.log(count) //2
let corlors = new Array() //创建一个数组 let count = colors.push("red","green") //推入两项 console.log(count) //2 count = colors.push("black") //再推入一项 console.log(count) //3 let item = colors.shift() // 取得第一项 console.log(item) //red console.log(count) //2 console.log(colors) //["green","black"] count = colors.unshift("yellow") console.log(count) //3 console.log(colors) //["yellow","green","black"]
二:排序
1.reverse():反转数组
let values = [1,2,3,4,5] values.reverse() console.log(values) //[5,4,3,2,1]
2.sort():默认情况下会按照升序重新排列数组元素,但是排列的元素是调用了toString()后的,所以在排列数值时会先转为字符串再比较。
为此,sort()函数会接受一个比较函数决定哪一个数排在前面。
//升序 function compare(a,b){ if(a<b){ return -1 } else if (a>b){ return 1 } else { return 0 } } //降序 function compare(a,b){ if(a<b){ return 1 } else if (a>b){ return -1 } else { return 0 } }
改为箭头函数为
values.sort((a,b) => a<b ? 1 : a>b ? -1 : 0)//降序
如果比较的数组为数值或者valueOf()方法返回的对象(如Date对象),可以直接简写为b-a(降序)
//升序 function compare(a,b){ return a-b } //降序 function compare(a,b){ return b-a }
三:操作方法
1.concat():在现有数组全部元素基础上创建一个新数组,首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这个新构建的数组。(注:如果传入一个或多个数组,concat会把这些数组的每一项都添加到结果数组,如果参数不是数组,则直接把它们添加到结果数组末尾)
let colors = ["red","green","blue"] let colors2 = colors.concat("yellow",["black","brown"]) console.log(colors) // ["red","green","blue"] console.log(colors2) // ["red","green","blue","yellow","black","brown"]
打平参数的行为可以重写,方法是在参数数组上指定一个特殊的符号:Symbol.isConcat-Spreadable,把这个值设为true可以强制打平类数组对象。
eg:
let colors = ["red","green","blue"] let newColors = ["black","brown"] let moreNewColors = { [Symbol.isConcat-Spreadable]:true, length:2, 0:"pink", 1:"cyan" } newColors[Symbol.isConcat-Spreadable] = false // 不打平参数 // 强制不打平数组 let colors2 = colors.concat("yellow", newColors) //强制打平数组 let colors = colors.concat(moreNewColors) console.log(colors) // ["red","green","blue"] console.log(colors2) // ["red","green","blue","yellow", ["black","brown"]] console.log(colors3) // ["red","green","blue", "pink", "cyan"]
2.slice:创建一个包含原数组中一个或多个元素的新数组,接收一个或两个参数(第一个参数:开始索引,第二个参数:结束索引,如果只有一个参数,则会返回开始索引位置到数组末尾的所有元素,其中不包含结束索引的元素)
let arr = [1,2,3,4,5,6] let arr2 = arr.slice(1) let arr3 = arr.slice(1,4) console.log(arr2) // [2,3,4,5,6] console.log(arr3) // [2,3,4]
3.splice:在数组中间插入元素。
(1)删除:传两个参数,第一个参数为要删除的第一个元素的位置,第二个参数为要删除的元素数量。
(2)插入:传三个参数,开始位置、0(要删除的元素数量)、要插入的元素。可以在数组中指定的位置插入元素,可以传第四个第五个任意个要插入的元素。
(3)替换:传三个参数,开始位置、要删除的元素数量、要插入的任意多个元素。要插入的元素数量不一定要和删除的元素数量一致。
eg:
注意:splice方法始终返回这样一个数组,它包含从数组中被删除的元素(如果没有删除,则返回空数组)
let colors = ["red","green", "blue"] let removed = colors.splice(0,1) // 删除第一项 console.log(colors) // ["green", "blue"] console.log(removed) // ["red"],只有一个元素的数组 removed = colors.splice(1,0,"yellow","orange")// 在位置1插入两个元素 console.log(colors) // ["green", "yellow","orange","blue" console.log(removed) // [],空数组 removed = colors.splice(1,1,"red","pueple")//在位置1删除一个元素,插入两个值 console.log(colors) // ["green", "red","pueple", "orange","blue"] console.log(removed) // ["yellow"]