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

时间:2018-09-28 15:57:23

标签: javascript

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

由于性能成本,我不希望使用array.slice().reverse().find(),也不愿意使用for循环,因为它很冗长,不符合函数式编程的精神

3 个答案:

答案 0 :(得分:2)

没有,但是您可以轻松地对其进行填充:

 Array.prototype.findLast = function(fn) {
  for(let i = this.length - 1; i >= 0; i--) 
    if(fn( this[i], i, this )) return this[i];
  return null;
 };



console.log([5,4,3,2,1].findLast(el => el > 3));

答案 1 :(得分:2)

您可以使用X a = new X("param"); Y b = new Y(a); Z c = new Z(b); ,这符合函数式编程的精神。但是,找到匹配项并没有reduceRight循环中那样容易返回(but possible):

for

还有递归,它具有类似的效率问题(堆栈帧开销,没有瞬时提前返回,必须编写辅助函数或额外的条件,如果数组很大,则将栈炸掉)。

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));

答案 2 :(得分:1)

Lodash具有_.findLastIndex()方法,该方法从右到左遍历集合。 https://lodash.com/docs/4.17.10#findLastIndex

虽然不确定其性能