数组的常用方法
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 = [1, 30, 39, 29, 10, 13];
var val = num.findIndex(myFunc);
function myFunc(element) {
return element >= 18;
}
Array.filter()
定义
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
返回值 一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组
filter()特性
- 函数执行次数 === 数组长度
- 函数内部的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()特性
- 函数执行次数 !== 数组长度
- 函数内部的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()特性
- 循环次数 !== 数组长度
- 函数内部的return
- return true : 循环继续 当前元素满足条件,继续判断,如果循环执行完毕还是true,则every的返回值就是true
- return false : 循环结束,当前元素不满足条件,every的返回值也是false
- 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