集合引用类型

1、严格相等

 ECMAScript 提供了 3 个严格相等的搜索方法:indexOf()、lastIndexOf()和 includes()。其 中,前两个方法在所有版本中都可用,而第三个方法是 ECMAScript 7 新增的。这些方法都接收两个参 数:要查找的元素和一个可选的起始搜索位置。indexOf()和 includes()方法从数组前头(第一项) 开始向后搜索,而 lastIndexOf()从数组末尾(最后一项)开始向前搜索。

indexOf()和 lastIndexOf()都返回要查找的元素在数组中的位置,如果没找到则返回-1。 includes()返回布尔值,表示是否至少找到一个与指定元素匹配的项。在比较第一个参数跟数组每一 项时,会使用全等(===)比较,也就是说两项必须严格相等。下面来看一些例子:

let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];

alert(numbers.indexOf(4)); // 3

alert(numbers.lastIndexOf(4)); // 5

alert(numbers.includes(4)); // true

alert(numbers.indexOf(4, 4)); // 5

alert(numbers.lastIndexOf(4, 4)); // 3

alert(numbers.includes(4, 7)); // false

let person = { name: "Nicholas" };

let people = [{ name: "Nicholas" }];

let morePeople = [person];

alert(people.indexOf(person)); // -1

alert(morePeople.indexOf(person)); // 0

alert(people.includes(person));//false alert(morePeople.includes(person)); // true

2、归并方法

ECMAScript 为数组提供了两个归并方法:reduce()和 reduceRight()。这

两个方法都会迭代数 组的所有项,并在此基础上构建一个最终返回值。reduce()方法从数组第一项开始遍历到最后一项。 而 reduceRight()从最后一项开始遍历至第一项。

这两个方法都接收两个参数:对每一项都会运行的归并函数,以及可选的以之为归并起点的初始值。 传给 reduce()和 reduceRight()的函数接收 4 个参数:上一个归并值、当前项、当前项的索引和数 组本身。这个函数返回的任何值都会作为下一次调用同一个函数的第一个参数。如果没有给这两个方法 传入可选的第二个参数(作为归并起点值),则第一次迭代将从数组的第二项开始,因此传给归并函数 的第一个参数是数组的第一项,第二个参数是数组的第二项。

   可以使用 reduce()函数执行累加数组中所有数值的操作,比如:

let values = [1, 2, 3, 4, 5]; let sum = values.reduce((prev, cur, index, array) => prev + cur);

 alert(sum); // 15

第一次执行归并函数时,prev 是 1,cur 是 2。第二次执行时,prev 是 3(1 + 2),cur 是 3(数 组第三项)。如此递进,直到把所有项都遍历一次,最后返回归并结果。

reduceRight()方法与之类似,只是方向相反。来看下面的例子:

let values = [1, 2, 3, 4, 5];

let sum = values.reduceRight(function(prev, cur, index, array){

return prev + cur; });

alert(sum); // 15

在这里,第一次调用归并函数时 prev 是 5,而 cur 是 4。当然,最终结果相同,因为归并操作都 是简单的加法。 究竟是使用 reduce()还是 reduceRight(),只取决于遍历数组元素的方向。除此之外,这两个 方法没什么区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值