一、不会改变原数组
1、concat
concat ()方法用于连接两个或多个数组,返回一个连接后的副本
var arr = [1,2,3,4]
var arr2 = [5, 6]
var arr3 = [7, 8]
console.log(arr.concat(arr2)); // [1, 2, 3, 4, 5, 6]
console.log(arr.concat(arr2, arr3)); // [1, 2, 3, 4, 5, 6, 7, 8]
console.log(arr.concat(10)); // [1, 2, 3, 4, 10]
console.log(arr); // [1, 2, 3, 4](原数组未被修改)
2、slice
slice(start,end)方法用于提取数组的一部分并将其返回,截取索引start(包含)到索引end(不含)
var arr = [1, 2, 3, 4]
arr.slice() // [1, 2, 3, 4]
arr.slice(2) // [3, 4]
arr.slice(1,3) // [2, 3]
arr.slice(-4, -1) // [1, 2, 3]
3、join
join(分隔符)方法将数组通过指定分隔符分隔成一个字符串,返回一个新字符串。
var arr = [1, 2, 3, 4]
console.log(arr.join()) // '1234'
console.log(arr.join(',')) // '1,2,3,4'
4、indexOf
indexOf(element, index)方法返回数组中某个指定的元素位置,并返回最后一个匹配项的索引。此方法区分大小写。没有返回-1 element 要查找的元素,index 开始查找的索引
var arr = [1, 2, 3, 2, 1]
console.log(arr.indexOf(2)) // 1
console.log(arr.indexOf(2,3)) // 3
console.log(arr.indexOf(5)) // -1
5、lastIndexOf
lastIndexOf()方法将搜索给定数组中的指定元素,并返回最后一个匹配项的索引。此方法区分大小写。没有返回-1 element 要查找的元素,index 开始查找的索引
var arr = [1, 2, 3, 2, 1]
console.log(arr.lastIndexOf(2)) // 3
console.log(arr.lastIndexOf(0,3)) // -1
console.log(arr.lastIndexOf(5)) // -1
6、forEach
forEach()方法用于为每个数组元素调用一次指定的函数。 array.forEach(callback(currentValue,index,arr) ,thisValue) currentValue 当前值 index 当前索引值 arr 参数表示当前元素所属的数组 thisValue表示执行回调函数callback()时的this指向。不写时,默认是指向window全局
var arr = [1, 2, 3, 4]
var sum = 0
arr.forEach(item => { sum += item})
console.log(sum) // 10
- forEach()无法提前结束,除非抛出错误
- forEach()没有返回值
- forEach()会跳过空值
- forEach()的循环次数由数组初始长度决定
7、map
map()方法为每个数组元素调用指定的函数,并返回新数组。 array.map(callback(currentvalue,index,arr),thisArg) currentValue 当前值 index 当前索引值 arr 参数表示当前元素所属的数组 thisValue表示执行回调函数callback()时的this指向。
var arr = [1, 2, 3, 4]
var result = arr.map(item => item * 2)
console.log(result) // [2, 4, 6, 8]
- map()无法提前结束
- map()比forEach()运行速度快70%左右
8、filter
filter()方法返回满足所提供的条件的数组 array.filter(callback(currentvalue,index,arr),thisArg) currentValue 当前值 index 当前索引值 arr 参数表示当前元素所属的数组 thisValue表示执行回调函数callback()时的this指向。
var arr = [1, 2, 3, 4]
var result = arr.filter(item => item>2)
console.log(result) // [3, 4]
9、every
every()方法检查数组中所有给定的元素是否满足提供的条件。返回布尔值 array.every(callback(currentvalue,index,arr),thisArg)
var arr = [1, 2, 3, 4]
var result1 = arr.every(item => item > 0)
var result2 = arr.every(item => item > 2)
console.log(result1) // true
console.log(result2) // false
10、some
some()方法检查是否至少有一个元素满足条件。返回布尔值 array.some(callback_funct(element, index, array), thisArg);
var arr = [1, 2, 3, 4]
var result1 = arr.some(item => {item > 3})
var result2 = arr.some(item => {item > 4})
console.log(result1) // true
console.log(result2) // false
11、reduce
reduce()方法将一个数组的内容聚合成单个值(数字、字符串、对象或新数组)。 array.reduce(callback(accumulator, currentValue, currentIndex, array), initialValue) array.reduce()接收两个参数,一个是对数组每个元素执行的回调方法callback(),一个是初始值initialValue。 回调方法接收四个参数accumulator: 它将累加在函数的最后一次调用中返回的回调函数的返回值。currentValue: 是正在处理的当前元素的值。currentIndex: 这是一个可选参数,用于保存正在处理的当前元素的索引值。如果提供初始值,索引将从0开始。否则从1开始。array: 这也是可选的,它包含reduce()将在其上工作的元素。
如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始
var arr = [1, 2, 3, 4]
// 数组求和
console.log(arr.reduce((x, y) => x + y, 0);) // 10
// 查找数组中的最大值
console.log(arr.reduce((x, y) => Math.max(x, y))) // 4
// 计算数组中元素出现的次数
var arr = ['A', 'D', 'C', 'B', 'A'];
var arrNum = arr.reduce((pre,cur) => {
(cur in pre) ? pre[cur]++ : pre[cur] = 1
return pre
},{})
console.log(arrNum); // {A: 2, D: 1, C: 1, B: 1}
12、reduceRight
reduceRight()方法将一个数组的内容从右至左聚合成单个值(数字、字符串、对象或新数组)。 array.reduceRight(callback(accumulator,currentValue,currentIndex,array),initialValue)
var arr=['a', 'b', 'c', 'd'];
var result = arr.reduceRight(function(right, left){
return (right+left);
});
console.log(result) // 'dcba'
二、会改变原数组
1、push
push()方法将一个或多个元素添加到给定数组的末尾。返回原始数组的长度。
var arr = [1, 2, 3, 4]
consloe.log(arr.push(5, 6)) // 6
console.log(arr) // [1, 2, 3, 4, 5, 6]
2、pop
pop()方法删除并返回数组的最后一个元素。
var arr = [1, 2, 3, 4]
var result = arr.pop()
console.log(result) // 4
console.log(arr) // [1, 2, 3]
3、shift
shift()方法删除并返回数组的第一个元素
var arr = [1, 2, 3, 4]
var result = arr.shift()
console.log(result) // 1
console.log(arr) // [2, 3, 4]
4、unshift
unshift()方法在给定数组的开头添加一个或多个元素,返回新数组长度 array. unshift(element1,element2,....,elementn)
var arr = [1, 2, 3, 4]
var result = arr.unshift(-1, 0)
console.log(result) // 6
console.log(arr) // [-1, 0, 1, 2, 3, 4]
5、sort
sort()方法用于按某种顺序排列数组元素。 array.sort(compareFunction) 没有参数对数组中元素按照字符编码的顺序进行升序排序
var arr = [1, 2, 3, 4, 10, 20, 30 ,40]
console.log(arr.sort()) // [1, 10, 2, 20, 3, 30, 4, 40]
var result = arr.sort((a, b) => { return b-a })
console.log(result) // [40, 30, 20, 10, 4, 3, 2, 1]
6、reverse
reverse()方法反转给定数组的元素。
var arr = [1, 2, 3, 4]
console.log(arr.reverse()) // [4, 3, 2, 1]
7、splice
splice()方法用于给数组添加或从中删除元素,返回被删除的元素数组 array.splice(start,delete,element1,element2,?,elementn)
start 开始提取元素的索引。delete 可选,它表示要删除的元素个数 element1,element2,...,elementn 可选,它表示要插入的元素
var arr = [1, 2, 3, 4]
console.log(arr.splice(2, 1, 5, 6)) // [3]
console.log(arr) // [1, 2, 5, 6, 4]
var arr1 = [1, 2, 3, 4]
console.log(arr1.splice(2, 0, 5, 6)) // []
console.log(arr1) // [1, 2, 5, 6, 3, 4]