数组方法

237 阅读3分钟

数组的常用方法

Array.flat() 数组扁平化

定义

flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回

返回值

一个包含将数组与子数组中所有元素的新数组。(就是扁平化后的每一项重新组成的数组,所以不会改变原数组)

Array.prototype.flat() 特性

  • Array.prototype.flat() 用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。
  • 不传参数时,默认“拉平”一层,可以传入一个整数,表示想要“拉平”的层数。
  • 传入 <=0 的整数将返回原数组,不“拉平”
  • Infinity 关键字作为参数时,无论多少层嵌套,都会转为一维数组
  • 如果原数组有空位,Array.prototype.flat() 会跳过空位
let arr = [1,2,[3,[4,[5]]]]
const reasut = arr.flat()
console.log(reasut)
// [1, 2, 3, [4,[5]]]

Array.fill() 数组填充

定义

fill()方法能使用特定值填充数组中的一个或多个元素。当只是用一个参数时,该方法会用该参数的值填充整个数组。

返回值 无

fill() 特性

  • fill()方法可用于空数组的初始化,接受一个参数时,表示数组填充的值
  • 当其接受三个参数时,表示对数据的某些数据项进行替换。其中第一个参数表示替换的元素,第二个参数是起始位置(其参数表示数组中的下标),第三个参数是结束位置(注意:其参数表示结束位置,但不包括此位置)
let arr = [1, 2, 3,  cc , 5];
arr.fill(1);
console.log(arr); 
// [1,1,1,1,1]

Array.includes()

定义

includes()方法是用来判断一个数组是否包含一个指定的值

返回值 布尔值

const arr = ['a', 'b', 'c'];
arr.includes('b'); // true
arr.includes('z'); // false
arr.includes(1); // false

Array.forEach()

定义

forEach()对数组进行循环遍历,对数组中的每一项运行给定函数 (注意没有办法跳出或终止forEach语句,除非抛出异常) forEach方法不会改变原数组

返回值 无

var arr = [11, 22, 33, 44, 55];
arr.forEach(function(x, index, a){
    console.log(x +  |  + index +  |  + (a === arr))
});

Array.map()

定义

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值

返回值 返回新数组

var arr = [1, 2, 3, 4, 5];
var arr2 = arr.map(function(item){
    return item*item
});
console.log(arr2);  //[1, 4, 9, 16, 25]

Array.find()

定义

find() 方法返回通过测试(函数内判断)的数组的第一个元素的值

返回值 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。如果没有符合条件的元素返回undefined

find特性

  • find()方法为数组中的每个元素都调用一次函数执行,当数组中的元素在测试条件时返回true
  • find()返回符合条件的元素,之后的值不会再执行函数。如果没有符合条件的元素则返回undefined。
let arr = [1, 2, 3,  arr , 5, 1, 9];
console.log(arr.find((value, keys, arr) => {  
    return value > 2;
})); // 3 返回匹配的值

Array.findIndex()

定义

findIndex() 方法返回数组中满足所提供的测试函数的第一个元素的索引

返回值 当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数 如果没有符合条件的元素,则返回 -1

注意

  • findIndex() 对于空数组,函数是不会执行的
  • findIndex() 并没有改变数组的原始值
var num = [13039291013];
var val = num.findIndex(myFunc);

function myFunc(element) {
    return element >= 18;
}

Array.filter()

定义

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素

返回值 一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组

filter()特性

  1. 函数执行次数 === 数组长度
  2. 函数内部的return
    • return true : 满足筛选条件,放入新数组中
    • return false : 不满足条件,不放入新数组中

注意

  • filter()方法不会对空数组进行检测
  • filter()方法不会改变原始数组
let users = [
  {id: 1, name: "John"},
  {id: 2, name: "Pete"},
  {id: 3, name: "Mary"}
];
 
// 返回前两个用户的数组
let someUsers = users.filter(item => item.id < 3);
 
console.log(someUsers);

Array.reduce()

定义

reduce() 会循环数组每一项,并且会保留上一次循环的结果供下一次循环使用,最终结果为数组循环完毕后的最终返回(return)的值

reduce方法接收两个参数,第一个参数是回调函数reducer,第二个参数是初始值

返回值 一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组

let arr = [10, 5, 3, 7]

let result = arr.reduce((sum, value) => {

    sum += value

    return sum;

}, 0)

console.log(result); // 25

Array.some()

定义

some() 判断数组中是否有满足条件的元素

返回值 boolean值,表明数组中是否有满足条件的元素。如果有满足条件的元素,则返回true;如果没有满足条件的元素,则返回false。

some()特性

  1. 函数执行次数 !== 数组长度
  2. 函数内部的return
    • return true : 循环结束,找到了满足条件的元素
    • return false : 循环继续,没找到循环继续,如果所有元素全部遍历还是没找到,最终结果为false

注意:

  • some()方法不会对空数组进行检测
  • some()方法不会改变原始数组
const arr = [10,20.50,60,70,80]
const res = arr.some(item => item < 0)
console.log(res)

Array.every()

定义

every() 判断数组中是否所有元素都满足条件

返回值 全部元素都满足条件返回true 有元素不满足条件返回false

every()特性

  1. 循环次数 !== 数组长度
  2. 函数内部的return
    • return true : 循环继续 当前元素满足条件,继续判断,如果循环执行完毕还是true,则every的返回值就是true
    • return false : 循环结束,当前元素不满足条件,every的返回值也是false
  3. every方法的返回值 return true : 全部元素都满足条件 return false : 有元素不满足条件

注意:

  • every()方法不会对空数组进行检测
  • every()方法不会改变原始数组
const arr = [10, 2, 30, 100, 50]
const result = arr.every(function(item) {
    return item < 200
})
console.log(result)  // true