文章目录
一、ES5
1. every()
判断一个数组中是否所有元素都符合回调函数的要求
var result = 数组.every(
function(当前元素值, 当前下标i, 当前数组){ //回调函数
return 检查当前元素值是否符合要求,并返回检查结果
}
);
原理:
i. every内自带for循环,自动遍历数组中每个元素
ii. 每遍历一个元素,就自动调用一次回调函数
iii. 在回调函数内,判断 当前元素值是否符合要求:
- true符合要求,every自动遍历下一个元素直到所有元素遍历完成,没有碰到不符合要求的元素,则结束循环,整体返回true。
- false不符合要求,every立刻退出循环,直接返回false
示例:
var arr1=[1,2,3,4,5];
var result1=arr1.every(
function(element , i, arr) {
console.log(`i下标元素值判断结果:${element %2==0}`);
return element %2==0
})
console.log(result1);//false
2. some()
检查一个数组中是否包含符合要求的元素
var result =数组.some(
function(当前元素值, 当前下标位置, 当前数组){
return 判断当前元素值是否符合要求
}
)
原理:
i. some内自带for循环,自动遍历数组中每个元素
ii. 每遍历一个元素,就自动调用一次回调函数
iii.在回调函数内,判断 当前元素值是否符合要求,并返回判断结果给some函数
- true符合要求,则说明至少当前元素符合要求,some立刻退出循环,直接返回true
- false不符合要求,some继续遍历下一个元素直到遍历结束,都没有发现符合要求的元素,则返回false。说明当前数组中不包含符合要求的元素。
示例:
arr1.some(
function(element ,i, arr) {
console.log(`i下标元素值判断结果:${element % 2 == 1}`);
return element %2 == 1 //不能被2整除
}
)
3. foreach()
代替for循环来简化遍历索引数组的特殊函数
arr.forEach(function(当前元素值, 当前下标i, 当前数组) {
对当前元素值执行操作
})
原理:
i. forEach内 自带for循环,自动遍历数组中每个元素
ii. 每遍历一个元素,就自动调用一次回调函数
iii. 在回调函数内,对当前元素执行规定的操作, 不需要返回值。
示例
var letters = ['a','b','c'];
letters.forEach(
(value, index, a) => {
console.log(`${value}:${index}`); //a:0, b:1, c:2
}
);
4. map()
读取原数组中每个元素值,修改后,生成一个新数组返回
var arr=[1,2,3,4,5]
var arr2 = arr.map((ele, i, arr) => element*2)
console.log(arr); // [1,2,3,4,5]
console.log(arr2); //[2,4,6,8,10]
原理:
i. 内部 创建一个新的空数组等待
ii. map内自带for循环,自动遍历原数组中每个元素
iii. 每遍历一个元素,就自动调用一次回调函数
iv. 在 回调函数内,对当前元素值进行修改,并将修改后的新值返回给map函数
v. map函数接到新值后, 自动放入新数组中对应的位置。
vi. 遍历结束, map返回新数组,原数组保持不变。
5. filter()
返回数组中符合条件的所有元素
var arr = [5, "element", 10, "the", true];
var result = arr.filter (
value => typeof value === 'string'
);
console.log(result); //["element", "the]
原理:
i. 内部 创建一个新的空数组等待
ii. map内自带for循环,针对每个元素调用一次回调函数
iii. 在 回调函数内,判断该元素值是否符合条件,并将符合条件的元素返回给新数组
iv. map函数接到新值后, 自动放入新数组中对应的位置。
v. 遍历结束, map返回新数组。原数组保持不变。
6. reduce
reduce 函数接收4个参数:
- Accumulator (acc) (累计器)
- Current Value (cur) (当前值)
- Current Index (idx) (当前索引)
- Source Array (src) (源数组)
reduce 函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果
//示例一:
var sum = [0, 1, 2, 3].reduce(
function (accumulator, currentValue) {
return accumulator + currentValue;
}, 0);
//箭头函数省略写法:sum
var arr = [1,3,5,7];
var result = arr.reduce( (pre, val) => pre+val, 0 );
console.log(result);
二、ES6
1. 数组拓展运算符(…)
console.log(...[1, 2, 3])
// 1 2 3
更多用法详见ES6——let/const/var、参数增强(…+解构)
2. 构造函数新增方法
-
Array.from(): 将类数组/可遍历对象(例如: Iterable/Set/Map)转换为数组
let arrayLike = {'0': 'e', '1': 'y'};
let arr = Array.from(arrayLike); // ['e', 'y']
-
Array.of(): 将一组值转换为数组
Array.of(10, 11, 12) // [10, 11, 12]
3. 实例新增方法
3.1 includes
判断数组是否包含该值,第二个参数可选:起始位置
[1, 2, 3].includes(3); // true
[1, 2, 3].includes(3, 3); // false
3.2 flat和flatMap
flat: 将数组扁平化处理,可通过传参改变拉平层数,默认1,返回新数组
[1, 2, [3, [4, 5]]].flat(2) // [1,2,3,4,5]
flatMap: 对原数组的每一项先进行map,然后再flat()扁平化,不改变原数组
[1, 3, 9].flatMap((x) => [x, x * 2])
// [[1, 2], [3 6], [9, 18]].flat()
// [1, 2, 3, 6, 9, 18]
3.3 entries / keys / values
- keys() 遍历键名
- values() 遍历键值
- entries() 遍历键值对
const arr = ['a', 'b']
for (let [index, value] of arr.entries()) {
console.log(index, value);
}
// 0 "a", 1, "b"
3.4 fill
使用给定值填充数组,第2/3个参数(可选)指定起始位置
new Array(2).fill(6) // [6, 6]
['a', 'b', 'c'].fill(7, 1, 2) // ['a', 7, 'c']
3.5 find / findIndex
- find 找出第一个符合条件的item
- findIndex 返回第一个符合条件item的index
传入回调函数,用于判断是否符合条件
const arr = [1,2,3,6]
arr.find(
(value, index, arr) => value > 3;
}) // 6
arr.findIndex(
(value, index, arr) => value > 3;
}) // 3
3.6 copyWithin
将指定位置items复制到其他位置(覆盖),返回当前数组
- target(必传)从该位置开始替换数据
- start:从该位置开始读取数据,默认0
- end:到该位置停止读取数据,默认数组长度
[1, 2, 3, 4, 5].copyWithin(0, 3)
// [4, 5, 3, 4, 5] 4,5覆盖1,2