# 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
})