数组方法总结(栈、队列、排序、操作)

一:数组增减

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"]

 

posted on 2024-03-06 16:47  zy89898976  阅读(2)  评论(0编辑  收藏  举报