百科狗-知识改变命运!
--

Array.prototype.findLast() - JavaScript Array 对象

是丫丫呀1年前 (2023-11-21)阅读数 18#技术干货
文章标签元素

Array.prototype.findLast()

findLast()方法返回数组中满足提供的测试函数条件的最后一个元素的值。如果没有找到对应元素,则返回undefined

语法

// 箭头函数
findLast((element) => { /* … */ } )
findLast((element, index) => { /* … */ } )
findLast((element, index, array) => { /* … */ } )

// 回调函数
findLast(callbackFn)
findLast(callbackFn, thisArg)

// 内联回调函数
findLast(function(element) { /* … */ })
findLast(function(element, index) { /* … */ })
findLast(function(element, index, array){ /* … */ })
findLast(function(element, index, array) { /* … */ }, thisArg)

参数

callbackFn

数组中测试元素的函数。

函数在被调用时会传递以下参数:

element

当前遍历到的元素。

index

当前遍历到的元素的索引(位置)。

array

调用findLast()的数组本身。

回调必须返回一个真值,表示发现一个适当的元素。该元素被findLast()返回。

thisArg可选

执行callbackFn时,用作this的对象。

返回值

数组中满足提供的测试函数索引最高的元素;如果没有元素匹配,返回undefined

描述

findLast()方法对数组每一个元素按降序(索引从大到小)执行callbackFn函数,直到callbackFn返回一个真值。然后findLast()返回该元素的值并停止遍历数组。如果callbackFn没有返回一个真值,则findLast()返回undefined

callbackFn会为数组中的每个元素调用,而不仅仅是那些被赋值的元素,这意味着对于稀疏数组来说,该方法的效率要低于那些只遍历有值的索引的方法。

如果为findLast()提供了thisArg参数,它将在每次调用callbackFn时作为this值。如果没有被提供,则使用undefined

findLast()方法不会改变调用它的数组,但是提供的callbackFn可以。findLast()处理的元素是在第一次调用callbackFn之前设置的。因此:

  • callbackFn不会访问在调用findLast()开始后才添加到数组中的任何元素。
  • 给已访问过的索引重新赋值将不会被callbackFn重新访问。
  • 给初始的范围外的索引赋值,其将不会被callbackFn访问。
  • 如果callbackFn更改了数组中现有的、尚未访问的元素,则其传递给callbackFn的值将是findLast()访问该元素索引时的值。
  • 仍然会访问已删除的元素。

警告:上一段描述的并发修改的情况经常导致难以理解的代码,通常应该避免(特殊情况除外)。

示例

查找与元素属性匹配的数组中的最后一个对象

此示例展示了如何根据数组元素的属性创建测试。

const inventory = [
  {name: 'apples', quantity: 2},
  {name: 'bananas', quantity: 0},
  {name: 'fish', quantity: 1},
  {name: 'cherries', quantity: 5}
];

// return true inventory stock is low
function isNotEnough(item) {
  return item.quantity 

使用箭头函数和解构

Array.prototype.findLast() - JavaScript Array 对象

前面的示例可以使用箭头函数和对象解构来编写:

const inventory = [
  {name: 'apples', quantity: 2},
  {name: 'bananas', quantity: 0},
  {name: 'fish', quantity: 1},
  {name: 'cherries', quantity: 5}
];

const result = inventory.findLast( ({ quantity }) => quantity 

查找数组中的最后一个素数

以下示例查找数组中的最后一个素数元素(如果没有素数,则返回undefined):

function isPrime(element) {
  if (element % 2 === 0 || element  "Visited index 5 with value 5"
// > "Visited index 4 with value undefined"
// > "Visited index 3 with value undefined"
// > "Visited index 2 with value undefined"
// > "Visited index 1 with value 1"
// > "Visited index 0 with value 0"
// > "Deleting array[5] with value 5"
// > "Visited index 6 with value 6"
// > "Visited index 5 with value undefined"
// > "Visited index 4 with value undefined"
// > "Visited index 3 with value undefined"
// > "Visited index 2 with value undefined"
// > "Visited index 1 with value 1"
// > "Visited index 0 with value 0"

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)