目录所有数组的方法(api)
ES3 的数组方法
join();
- 目的:将数组转换为字符串
- 是否改变原数组:不改变原数组,返回一个新的字符串
let arr = ["a","b","c","d","e"];
let arr1 = arr.join();
console.log(arr1); // a,b,c,d,e
console.log(arr); // ["a", "b", "c", "d", "e"] 不改变原来的数组
let arr2 = arr.join("-");
console.log(arr2); // a-b-c-d-e
复制代码
reverse();
- 目的 将数组中的元素颠倒顺序
- 是否改变原数组:改变原来的数组
let arr = ["a","b","c","d","e"];
let arr1 = arr.reverse();
console.log(arr1); // ["e", "d", "c", "b", "a"]
console.log(arr); // ["e", "d", "c", "b", "a"] 改变原来的数组
//怎么颠倒字符串呢?
//先把字符串转换数组再用数组的reverse转换
let str = "abcde";
let str1 = str.split("").reverse().join("");
console.log(str1); // edcba
复制代码
sort();
- 目的: 将数组中的元素按照一定规则排序(必须是数字)
- 是否改变原数组:改变原来的数组
let arr = [5,4,6,1,8,2,9];
let arr1 = arr.sort();
console.log(arr1); // [1, 2, 4, 5, 6, 8, 9]
console.log(arr); // [1, 2, 4, 5, 6, 8, 9] 改变原来的数组
复制代码
concat();
- 目的 用于连接两个或多个数组
- 是否改变原数组:不改变原来的数组,返回一个新的数组
let arr1 = [5,4,6,1,8,2,9];
let arr2 = ["a","b","c","d"];
let arr3 = arr1.concat(arr2);
console.log(arr3); // [5, 4, 6, 1, 8, 2, 9, "a", "b", "c", "d"]
复制代码
slice(start,end);
- 目的: 已有的数组中返回选定的元素
- 是否改变原数组:不改变原来的数组,返回一个新的数组
let arr = ["a","b","c","d"];
let arr1 = arr.slice(0,1);
let arr2 = arr.slice(1)
console.log(arr1); // ["a"]
console.log(arr2); // ["b", "c", "d"]
复制代码
splice();
- 目的 向/从数组中添加/删除项目,然后返回被删除的项目
- 是否改变原数组:改变原来的数组
let list = [1,2,3,];
// 删除
// list.splice(0,3); // 删除 -> 从下标为0开始,项数为1
// console.log(list); // [2,3]
// list.splice(0,2); // 删除 -> 从下标为0开始,项数为2
// console.log(list); // []
//替换
// list.splice(0,1,4); // 替换 -> 从下标为0开始,项数为1的数组元素替换成4
// console.log(list); // [4,2,3]
// list.splice(0,2,4); // 替换 -> 从下标为0开始,项数为2的数组元素替换成4(即4,2整体替换成4)
// console.log(list); // [4,3]
//添加
list.splice(1,0,5); // 表示在下标为1处添加一项5
console.log(list); // [1,5,2,3]
复制代码
push();和pop();
- 目的: 向数组后面中插入或删除元素
- 是否改变原数组:改变原来的数组
let list = [1,2,3];
let list1 = list.push(5);
console.log(list1); // 4 数组长度
console.log(list); // [1, 2, 3, 5]
let list2 = list.pop();
console.log(list2); // 后面最后一个值5 数组值
console.log(list); // [1,2,3]
复制代码
unshift();和shift();
- 目的 想数组前面中插入或删除
- 是否改变原数组:改变原来的数组
let list = [1,2,3,];
let list1 = list.unshift(5);
console.log(list1); // 4 数组长度
console.log(list); // [5,1, 2, 3]
let list2 = list.shift();
console.log(list2); // 5 第一个数组值
console.log(list); // [1,2,3]
复制代码
toString();和toLocaleSting();
- 目的: 把数组转换为字符串,并返回结果,每一项以逗号分割;把数组转换为本地数组,并返回结果。
- 是否改变原数组:不改变原来的数组,返回一个新的字符串
let list = [1,2,3,];
let list1 = list.toString();
console.log(list1); // 1,2,3
let list2 = list.toLocaleString();
console.log(list2); // 1,2,3
复制代码
ES5的数组方法
map();
*目的: 创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果
- 是否改变原数组:不改变原来的数组,返回一个新数组
let list = [1,2,3,];
const data = list.map(item=>(item * 2));
console.log(data); // [2, 4, 6]
console.log(list); // 原来数组不变
复制代码
filter();
- 目的: 将数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值
- 是否改变原数组:不改变原来的数组,返回一个新数组,新数组是原数组的子集
let arr = [1,2,3,4,5,8,9,10];
let list = arr.filter((x) => {
return x>2;
})
console.log(list); // [3, 4, 5, 8, 9, 10]
复制代码
every()和some();
- 目的:对数组元素应用指定的函数判定
- 对于空数组,every() 返回true, some()返回 false.
let arr = [1,2,3,4,5,8,9,10];
let list = arr.every((x) => {
return x>2;
})
console.log(list); // false
let arr = [1,2,3,4,5,8,9,10];
let list = arr.some((x) => {
return x>2;
})
console.log(list); // true
复制代码
reduce()和reduceRight()
- 目的:使用指定的函数将数组元素进行组合,生成单个值.
- 是否改变原数组: 不改变原数组,返回一个新数组。
let data = [1,2,3,4,5,6,7,8,9,10]
let str = data.reduce((prev,cur,index,arr) => {
return prev + cur ;
});
console.log(str); // 55
reduceRight()从数组的末尾向前将数组中的数组项做累加
let data = [1,2,3,4,5,6,7,8,9,10]
let str = data.reduceRight((prev,cur,index,arr) => {
return prev + cur ;
});
console.log(str);
复制代码
indexOf()和lastIndexOf()
- 目的:搜索数组中具有给定值的元素。
- indexOf() 指从前往后查询. lastIndexOf() 指从后往前查询.
let arr = [2, 4, 6, 8, 8, 6, 4, 2];
console.log(arr.indexOf(4, 2)); //从索引为2的位置开始查找 6
console.log(arr.indexOf(4)); //从头开始找,找到第一个即停止 1
let arr = [2, 4, 6, 8, 8, 6, 4, 2];
console.log(arr.lastIndexOf(4)); //从后往前走,但返回的是从前往后的索引 6
console.log(arr.indexOf("2")); //找不到返回-1 -1
复制代码
ES6的数组方法
Array.from();
- 目的:将类数组对象和可遍历对象转化为数组.
let obj = "ffkfkfk";
let list = Array.from(obj);
console.log(list); // ["f", "f", "k", "f", "k", "f", "k"]
复制代码
Array.of()
- 目的:将一组值转化为数组.
let arr = [1,2,3,4];
let list = Array.of(arr);
console.log(list); // [Array(4)]
复制代码
copyWithin();
- 目的:在数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员).
- 是否修改原数组:修改原数组.
let fruits = ["Banana", "Orange", "Apple", "Mango"];
let list = fruits.copyWithin(2, 0);
console.log(list) // ["Banana", "Orange", "Banana", "Orange"]
复制代码
find()和findIndex()
- 目的:在数组内部, 找到第一个符合条件的数组成员.
查找元素,返回找到的值,找不到返回undefined。
const arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
const ret1 = arr1.find((value, index, arr) => {
return value > 4
})
const ret2 = arr1.find((value, index, arr) => {
return value > 14
})
console.log('%s', ret1) // 5
console.log('%s', ret2) // undefined
复制代码
fill();
- 目的:如其意,填充一个数组.
const fruits = ["Banana", "Orange", "Apple", "Mango"];
const list = fruits.fill("Runoob");
console.log(list); // ["Runoob", "Runoob", "Runoob", "Runoob"]
复制代码
ES7的数组方法
includes();
- 目的:表示某个数组是否包含给定的值,与字符串的includes()方法类似.
Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。该方法属于 ES7 ,但 Babel 转码器已经支持。
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, NaN].includes(NaN); // true
该方法的第二个参数表示搜索的起始位置,默认为 0 。如果第二个参数为负数,则表示倒数的位置,如果这时它大于数组长度(比如第二个参数为 -4 ,但数组长度为 3 ),则会重置为从 0 开始。
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
复制代码
总结不对的地方请大神们指点一下