数组的方法

59 阅读5分钟

一、不会改变原数组

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]