汇总数组新增特性(ES5/6)

一、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(712) // ['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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你脸上有BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值