首先,数组的API 从简单到复杂,返回值可能不同,有的直接改变数组,有的不会直接改变数组,接受的数据不同,接下来就从这几方面去分析么个API,也不去分类,从功能来说,讲到哪个是哪个
- Push 增
arr.push(1,2,3);
向数组末尾增加一项或多项
改变数组本身
返回数组长度
- Unshift 增
arr.unshift(1,2,3);
向数组开始位置添加一项或多项
改变数组本身
返回数组长度
- Pop 删
arr.pop()
删除数组末尾第一个元素
改变数组本身
返回删除的元素
- shift 删
arr.shift()
删除数组开始位置第一个元素
改变数组本身
返回删除的元素
- splice 增/删
arr.splice(增或删的开始索引, 删除的数量,增加项)
- 增(如果删除的数量为0,则为增加)
arr.splice(0, 1); //从第0项开始删除,删除一项
; - 删
arr.splice(0, 0, '1', '2'); //从第0项开始添加,删除项为'1','2'
;
splice也会改变原数组
返回值为删除项构成的数组,如果是增加返回空数组[ ]
- slice 截取数组
newArr = arr.slice(2,5); 包含2不包含5
不改变原数组(需要赋值给新数组)
返回截取的数组
用arr.slice()可以实现数组的深拷贝
- join把数组转换为字符串
str = arr.join(',')
不改变原数组(需要赋值)
返回转换成的字符串
- toString 把数组转换为字符串
str = a.toString()
不改变原数组(需要赋值)
返回转换成的字符串
和join的区别就是,他的字符串分割符只能是逗号,无法自定义。
- concat 合并数组
newArr= arr1.concat(arr2,arr3);
不改变原数组(需要赋值)
返回新数组
- reverse 反转
arr.reverse()
改变原数组
返回反转的数组
- sort 排序
arr.sort(fn)
改变原数组
返回排序后的数组
sort不传参数时,按照字母的先后顺序排序。 sort传参时,必须传递一个数组。
function sortNumber(a,b)
{
return a - b
}
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
document.write(arr + "<br />")
document.write(arr.sort(sortNumber))
// 10,5,40,25,1000,1
// 1000,40,25,10,5,1
- filter 过滤
arr = [1,1000,24,2,3,10];
arr1 = arr.filter(item => item > 5 );
console.log(arr); // [1, 1000, 24, 2, 3, 10]
console.log(arr1); // // [1000, 24, 10]
不改变原数组(需要赋值)
接受一个返回条件的函数,返回符合条件项的数组
- map 映射
arr = [1,1000,24,2,3,10];
arr1 = arr.map(item => item + 1 );
console.log(arr); // [1, 1000, 24, 2, 3, 10]
console.log(arr1); // // [2, 1001, 25, 3, 4, 11]
不改变原数组(需要赋值)
接受一个返回新值的函数,返回新的数组
- find/findIndex 查找
arr = [1,1000,24,2,3,10];
a = arr.find(item => item > 5 );
index = arr.find(item => item > 5 );
console.log(arr); // [1, 1000, 24, 2, 3, 10]
console.log(a); // 1000
console.log(index) // 1
相当于搜索,不影响原数组
返回符合要求的第一个元素项
- every 所有
arr = [1,1000,24,2,3,10];
a = arr.every(item => item > 0 );
b = arr.every(item => item > 5 );
console.log(arr); // [1, 1000, 24, 2, 3, 10]
console.log(a); // true
console.log(b); // false
相当于一个判断,不改变原数组
返回true/false(是否所有项符合条件)
- some 部分
arr = [1,1000,24,2,3,10];
a = arr.some(item => item > 0 );
b = arr.some(item => item > 5 );
console.log(arr); // [1, 1000, 24, 2, 3, 10]
console.log(a); // true
console.log(b); // false
相当于一个判断,不影响原数组的改变
返回true/false(是否所有项符合条件)
- fill 填充
// 定义一个数组,规定它的长度,并填充
var arr = new Array(5).fill('a');
console.log(arr); // ['a','a','a','a','a']
a.fill(1);
console.log(a); // [1,1,1,1,1]
可以看出它返回的是一个新数组,并且改变了原数组
- includes 包含
var arr = [1,2,3,4,5];
console.log(arr.includes(2)); // true
console.log(arr); // [1,2,3,4,5]
判断,不影响原数组
返回true/false
- indexOf/lastIndexOf 包含
var arr = [1,2,3,4,5];
console.log(arr.indexOf(3)); // 2
console.log(arr.lastIndexOf (4)); // 3
console.log(arr); // [1,2,3,4,5]
判断,不影响原数组
返回索引值
- forEach 循环
调用数组每一项执行回调函数