数组常见方法
- 前言:
- ~~1~~ Arrray.push()
- ~~2~~ Array.pop()
- ~~3~~ Array.join()
- ~~4~~ Array.unshift()
- ~~5~~ Array.shift()
- ~~6~~ Array.sort()
- ~~7~~ Array.reverse()
- ~~8~~ Array.concat()
- ~~9~~ Array.slice()
- ~~10~~ Array.splice()
- ~~11~~ Array.indexOf()
- ~~12~~ Array.lastIndexOf()
- ~~13~~ Array.forEach()
- ~~14~~ Array.filter()
- ~~15~~ Array.map()
- ~~16~~ Array.some()
- ~~17~~ Array.every()
- ~~18~~ Array.includes()
- ~~19~~ Array.reduce()
前言:
自己临时总结,若有遗漏,望留言补充!在coding bug的路上,我与你同在!
1 Arrray.push()
在原数组尾部添加新元素或者新数列;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let pushEl = 3;
arr.push(pushEl)
console.log(`newArr:`,arr); // --newArr: (11) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0, 3]
}
2 Array.pop()
移除数组最后一项,减少数组的length,返回被移除的值
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
arr.pop()
console.log(`newArr:`,arr); // --newArr: (11) [5, 4, 2, 6, 2, 6, 8, 2, 9]
console.log(`使用pop方法:`,arr.pop()) // --使用pop方法: 9 因为输出时又使用里一次pop()
}
3 Array.join()
数组转换成字符串的连接符,默认是逗号 ‘,’;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
arr.join('/')
console.log(`newArr:`,arr); // --newArr: (11) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0]
console.log(`使用join:`,arr.join('/')) // --使用join: 5/4/2/6/2/6/8/2/9/0
}
4 Array.unshift()
unshift:将参数添加到原数组开头,并返回数组的长度 。
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let arr2 = [1];
arr.unshift();
arr2.unshift('new');
console.log(`newArr:`,arr.unshift()); // --newArr: 10 即返回数组长度
console.log(`使用unshift:`,arr2) // --使用unshift: ["new", 1] 即添加一个元素
}
5 Array.shift()
移除数组首项,返回删除的元素;若数组时空值,则返回 undefined;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let arr2 = [];
arr.shift();
arr2.shift();
console.log(`newArr:`,arr); // --newArr: (9) [4, 2, 6, 2, 6, 8, 2, 9, 0]
console.log(`使用shift:`,arr2.shift()) // --使用shift: undefined
}
6 Array.sort()
数组元素从小到大排列;返回已排列好的数组;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
arr.sort();
console.log(`newArr:`,arr); // --newArr: (10) [0, 2, 2, 2, 4, 5, 6, 6, 8, 9]
console.log(`使用sort:`,arr.sort()) // --使用sort: (10) [0, 2, 2, 2, 4, 5, 6, 6, 8, 9]
}
7 Array.reverse()
数组元素序列反转,返回反转序列数组;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
arr.reverse();
console.log(`newArr:`,arr); // --newArr: (10) [0, 9, 2, 8, 6, 2, 6, 2, 4, 5]
}
8 Array.concat()
两个或者多个数组合并成一个新的数组,返回新数组;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let arr2 = [3,33,333]
arr.concat(arr2);
console.log(`newArr:`,arr); // --newArr: (10) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0] 原数组并未改变
console.log(`使用concat:`,arr.concat(arr2)) // --使用concat: (13) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0, 3, 33, 333]
}
9 Array.slice()
返回从原数组中指定开始下标到结束下标之间的项组成的新数组。slice(startIndex,endIndex)方法可以接受一或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下, slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起始和结束位置之间的项——但不包括结束位置的项。";
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
arr.slice(2, 6);
console.log(`newArr:`,arr); // --newArr: (10) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0] 原数组并未改变
console.log(`使用slice:`,arr.slice(2, 6)) // --使用slice: (4) [2, 6, 2, 6]
}
10 Array.splice()
数组截取、插入和替换。删除:指定 2 个参数:要删除的第一项的位置和要删除的项数。插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的项数)和要插入的项。替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。"
删除:Array.splice(deleteStart, deleteItemSum)
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let spliceArr = arr.splice(2, 6);
console.log(`newArr:`,arr); // --newArr: (4) [5, 4, 9, 0] 原数组已改变,移除里 6 项 [2, 6, 2, 6, 8, 2]
console.log(`使用splice:`,spliceArr) // --使用splice: (6) [2, 6, 2, 6, 8, 2] 返回已删除的元素组成新数组
}
插入:Array.splice(startIndex, willDeleteSum, willInsertItems )
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let insertArr = [3,33,333]
let spliceArr = arr.splice(2, 0, insertArr);
console.log(`newArr:`,arr); // --newArr: (11) [5, 4, Array(3), 2, 6, 2, 6, 8, 2, 9, 0] 举例中我插入一个数组insertArr
}
替换与插入相似,插入中第二个参数是删除的项数,相当于插入之前先删除;这里就不举例了;
11 Array.indexOf()
接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let changeArr = arr.indexOf(2, 3);
let orArr = arr.indexOf(100, 0);
console.log(`使用indexOf:`,changeArr,orArr) // --使用indexOf: 4 -1 存在返回下标index 否则返回-1
}
12 Array.lastIndexOf()
接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的末尾开始向前查找。 ";参考Array.indexOf()
13 Array.forEach()
对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值,每次运行完返回undefined。参数都是function类型,默认有传参,参数分别为:遍历的数组内容;对应的数组索引,数组本身。";
返回undefined:
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let changeArr =
arr.forEach((item) => {
return item;
});
console.log(`newArr:`,arr); // --newArr: (10) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0]
console.log(`使用forEach:`,changeArr) // --使用forEach: undefined
}
基本用法:
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let changeArr = [];
arr.forEach((item) => {
return changeArr.push(item*item);
});
console.log(`newArr:`,arr); // --newArr: (10) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0]
console.log(`使用forEach:`,changeArr) // --使用forEach: (10) [25, 16, 4, 36, 4, 36, 64, 4, 81, 0]
}
14 Array.filter()
“过滤”功能,数组中的每一项运行给定函数,返回满足过滤条件组成的数组。注意写法,写法不同输出结果不同,以下我举例三个以及一个错误写法…有{}必须有return;没{}则没return;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let changeArr =
arr.filter((item) => {
return item > 2;
});
// 类型 一
let type1 = arr.filter( item => item > 5);
// 类型 二
let type2 = arr.filter( item => { item > 5});
// 类型 三
let type3 = arr.filter( item => { return item > 5});
// 类型 四
// let type4 = arr.filter( item => return item > 5); //---->错误写法
console.log(`newArr:`,arr); // --newArr: (10) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0]
console.log(`使用filter:`,changeArr) // --使用filter: (6) [5, 4, 6, 6, 8, 9]
console.log(`类型 一:`,type1); // --类型 一: (4) [6, 6, 8, 9]
console.log(`类型 二:`,type2);// --类型 二: []
console.log(`类型 三:`,type3);// --类型 三: (4) [6, 6, 8, 9]
}
15 Array.map()
返回一个新的数组,数组元素则是经过函数调用后的元素;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let arrObject = [{
a:1,
b:2,
c:3,
d:4,
e:5
}];
let changeArr = arrObject.map(item => {
item.a = 6;
item.b = 7;
return {...item}
})
console.log(`原数组:`,arrObject); // --原数组: [{a: 6, b: 7, c: 3, d: 4, e: 5}]
console.log(`使用map:`,changeArr) // --使用map:[{a: 6, b: 7, c: 3, d: 4, e: 5}]
}
16 Array.some()
判断数组中存在一项则返回true;否则为false
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let arrObject = [{
a:1,
b:2,
c:3,
d:4,
e:5
}];
let changeArr = arrObject.some(item => item.a)
console.log(`原数组:`,arrObject); // --原数组:不变
console.log(`使用some:`,changeArr) // --使用some: true
}
17 Array.every()
判断数组中每一项都满足则为true,否则为false;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let arrObject = [{
a:1,
b:2,
c:3,
d:4,
e:5
}];
let changeArr = arrObject.every(item => item.a == 10)
console.log(`原数组:`,arrObject); // --原数组:不变
console.log(`使用every:`,changeArr) // --使用every: false
}
18 Array.includes()
判断数组是否包含某一元素,与indexOf相似,区别在于includes()可以判断NaN;
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0,NaN];
let arrObject = [{
a:1,
b:2,
c:3,
d:4,
e:5
}];
let changeArr = arr.includes(NaN)
console.log(`原数组:`,arrObject); // --原数组:不变
console.log(`使用includes:`,changeArr) // --使用includes: true
}
19 Array.reduce()
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。reduce() 方法接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce() 的数组。便于记忆,
即reduce(previous, current,currentIndex,Array);以下举例常规用法:
·求和:
testArray(){
let arr = [5,4,2,6,2,6,8,2,9,0];
let arrObject = [{
a:1,
b:2,
c:3,
d:4,
e:5
}];
// 数组求和
let total = arr.reduce( (previous, current) => {
return previous + current
})
console.log(`原数组:`,arr); // --原数组:不变
console.log(`数组求和total:`,total) // --数组求和total: 44
}
·二维数组改一维数组
testArray(){
let arr = [[5,4],[2,6],[2,6],[8,2],[9,0]];
// 二维数组改一维数组
let concat = arr.reduce( (previous, current) => {
return previous.concat(current)
})
console.log(`原数组:`,arr); // --原数组: (5) [Array(2), Array(2), Array(2), Array(2), Array(2)]
console.log(`二维数组改一维数组:`,concat) // --二维数组改一维数组: (10) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0]
}
·计算数组中元素出现的次数:
testArray(){
let arr = [5, 4, 2, 6, 2, 6, 8, 2, 9, 0];
let names = ['Tonny','Alice','Bruce','Hero','Tonny','Tonny','Alice','Hero'];
// 计算数组中每个元素出现的次数
let concat = names.reduce( (previous, current) => {
current in previous ? previous[current]++ : previous[current] = 1;
return previous;
},{});
let numberCount = (arr, value) => arr.reduce( (previous, current) => {
return value == current ? previous + 1 : previous + 0;
},0);
let number = numberCount(arr, 2);
console.log(`原数组:`,arr,names); // --原数组: (10) [5, 4, 2, 6, 2, 6, 8, 2, 9, 0] (8) ["Tonny", "Alice", "Bruce", "Hero", "Tonny", "Tonny", "Alice", "Hero"]
console.log(`计算数组中每个元素出现的次数:`,concat) // --计算数组中每个元素出现的次数: {Tonny: 3, Alice: 2, Bruce: 1, Hero: 2}
console.log(`计算数组Arr中2的出现次数:`,number) // --计算数组Arr中2的出现次数: 3
}
·数组去重:
testArray(){
let arr = [5, 4, 2, 6, 2, 6, 8, 2, 9, 0];
// 数组去重 方法一
let number = arr.sort().reduce( (previous, current) => {
previous.length === 0 || previous[previous.length - 1] !== current ? previous.push(current) : '' ;
return previous;
},[])
// 数组去重 方法二
let setNum = Array.from( new Set(arr)); // es6 拓展运算符
console.log(`原数组:`,arr); // --原数组: (10) [0, 2, 2, 2, 4, 5, 6, 6, 8, 9]
console.log(`去重后的数组 方法一`,number) // --去重后的数组 方法一 (7) [0, 2, 4, 5, 6, 8, 9]
console.log(`去重后的数组 方法二`,setNum) // --去重后的数组 方法一 (7) [0, 2, 4, 5, 6, 8, 9]
}
常见用法!