javascript - 如何找到从数组末尾开始的数组元素?

标签 javascript

JavaScript 有数组方法,如 indexOffind 用于获取数组中符合条件的第一个元素。 indexOf 的对应项是 lastIndexOf,它从数组末尾开始搜索。我现在想知道是否有从数组末尾开始的 find 的对应项,例如 Ramda's findLast 的 native 实现.

由于性能成本,我宁愿不使用 array.slice().reverse().find() 也不想使用 for 循环,因为它很冗长而不是本着函数式编程的精神

最佳答案

您可以使用reduceRight,这符合函数式编程的精神。但是,在找到匹配项后提前返回并不像在 for 循环中那样容易 ( but possible):

const lastIndexOf = (needle, haystack) => 
  haystack.reduceRight((a, e, i) => 
    a >= 0 ? a : e === needle ? i : -1
  , -1)
;

const arr = [1,4,3,5,5,4,5];
console.log(lastIndexOf(4, arr));
console.log(lastIndexOf(2, arr));

还有递归,它有类似的效率问题(堆栈帧开销,没有瞬时提前返回,必须编写一个帮助程序或额外的条件,如果数组很大,你会破坏堆栈......):

const lastIndexOf = (needle, haystack, idx) => 
  lastIndexOfHelper(needle, haystack, haystack.length - 1)
;

const lastIndexOfHelper = (needle, haystack, idx) => 
  idx < 0 || haystack[idx] === needle ? 
    idx : lastIndexOfHelper(needle, haystack, idx - 1)  
;

const arr = [1,4,3,5,5,4,5];
console.log(lastIndexOf(4, arr));
console.log(lastIndexOf(2, arr));

关于javascript - 如何找到从数组末尾开始的数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52558924/

相关文章:

javascript - 向 javascript 插件添加设置

javascript - CSS 重叠问题

javascript - 工具提示随 d3 地理 map 缩放(缩放)

javascript - 如何高性能地从两个数组中提取子数组?

javascript - 变换旋转图像定位问题

javascript - 在 JavaScript 中检查值并运行计算

javascript - 在 Chrome 中使用 React Native 调试 ES6 import 语句

javascript - 命名函数并向其添加事件监听器会导致 "not defined"

javascript - 如何按名称将 Google map 置于国家/地区的中心

javascript - blueimp jQuery文件上传新文件顺序