# JavaScript 数组

基本操作

  • 反转
  • 排序

# 新增

数组头部插入

array.unshift()

数组尾部插入

array.push()

数组任意位置插入

array.splice(start, ?delete, number)

array.splice(3, 0, 8) //从第三位开始,不删除,插入一个8

# 删除

删除指定位置的元素

array.splice(index, 1)

删除指定位置之后的所有元素

array.splice(index)

删除后x个元素

array.splice(-x)

# 修改

修改指定位置的元素

array.splice(index, 1, 8) //将第x位的元素,删除一个旧值并插入一个新值

# 查询

获取指定位置的单个元素

array.indexOf()

获取指定位置后的所有元素

array.slice(start)

# 反转

数组反转

array.reverse()

# 排序

数组排序

array.sort()
默认排序顺序是在将元素转换为字符串,然后比较它们的 UTF-16 代码单元值序列时构建的

# 实现栈功能

  • push() 向数组的最后插入一项 返回数组的最新长度
  • pop() 弹出数组的最后一项 返回这一项的内容

# 实现队列功能

  • push() 向数组的最后插入一项 返回数组的最新长度

  • shift() 弹出数组的第一项 返回这一项的内容

  • unshift() 向数组最前面插入x项 返回最新数组的长度

  • pop() 弹出数组的最后一项 返回这一项的内容

# API

# slice

array.slice(start, end)

能够基于当前数组中的一个或者多个项创建一个新数组

  • 在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前数组末尾的所有项
  • 如果有两个参数,该方法返回起始和结束位置之间的项(但不包括结束位置的项)

note: 原先的数组保持不变

# splice

array.splice(start, end)

方法 主要用途是向数组中插入/删除项,返回被删除的项

  • 删除:删除任意数量的项 指定两个参数:要删除的第一项的位置和要删除的项数
  • 插入:向指定位置插入任意数量的项 指定三个参数 :起始位置, 0 , 要插入的项(可以为多项)
  • 替换:向指定位置插入任意数量的项,且同时删除任意数量的项 指定三个参数 起始位置,要删除的项数和 要插入的任意数量的项

note:会改变原数组

# sort

array.sort()

默认情况下,不加参数,sort()方法按照字典升序排列数组项,为实现排序,sort()方法回调用每个数组项的toString()转型方法 然后比较得到的字符串。所以本质上sort是根据每一项的字符编码排序的

不指定参数

对于数字也是按字符编码从小到大排序

const arr = [1, 2, 3, 4, 11, 22, 33];
arr.sort();

console.log(arr); //[1, 11, 2, 22, 3, 33, 4]

指定参数

对于字符也是字符编码从小到大排序

const arr = ["1", "2", "3", "4", "11", "22", "33"];
arr.sort();

console.log(arr); //['1',  '11', '2', '22', '3',  '33', '4']

指定参数的情况 A.对于数值型或者其valueOf()方法返回数值类型的对象类型,可以使用一个简单的比较函数

array.sort(function(a, b) {
    if (a < b) {
        return -1;
    } else if (a > b) {
        return 1;
    }else{
        return 0;
    }
})

function compare(value1,value2){
    return value1 - value2;
}

B.但是对于非数值型的比较该函数必须补全 因为如果按照上面的简单比较函数而言,非数字字符串相减会得到NaN值,所以只能使用比较运算符

array.sort(function(a, b) {
    if (a < b) {
      return -1;
    } else if (a > b) {
      return 1;
    }else{
      return 0;
    }
  })

# indexOf

array.indexOf(value, index)

函数参数:

  • 第一个参数指定检索的字符串的值
  • 第二个参数指定起始的索引位置

返回值: 没有找到返回-1, 找到返回对应的项

lastIndexOf() 与indexOf() 类似,只不过从后向前找

# 迭代

ECMAScript为数组定义了5个迭代方法:

每个callback函数又都会接受三个参数: 数组项的值,数组下标,数组本身

  • every(): 对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true
  • filter(): 对数组中的每一项运行给定的函数,返回该函数返回为true的项组成的数组
  • forEach(): 对数组中的每一项运行给定的函数,这个方法没有返回值
  • map(): 对数组中的每一项运行给定的函数,返回每次函数调用的结果返回的数组
  • some(): 对数组中的每一项运行给定的函数,如果该函数对任一项返回true,则返回true
var numbers = [];
numbers.filter(function(number,index,array){
  //code here
})
陕ICP备20004732号-3