Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jun 7, 2022. It is now read-only.

Proposal for Array.prototype.findLast and Array.prototype.findLastIndex.

License

NotificationsYou must be signed in to change notification settings

tc39/proposal-array-find-from-last

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Proposal for.findLast() and.findLastIndex() methods on array and typed array.

Status

This is astage 4 proposal.

Motivation

Finding an element in an array is a very common programming pattern.

The proposal has a major concerns:Semantical. Which meansclearly representing the operation i want.

And with the changes. There's a sugar here: Performance. Avoid obvious overhead. And may improve the constant factors in the time complexity.Even there's not an order of magnitude change. But it's may useful in some performance-sensitive scenarios. eg: React render function.


ECMAScript currently supports{Array, %TypedArray%}.prototype.indexOf and{Array, %TypedArray%}.prototype.lastIndexOf to find an index of somevalue in the array.

There is also{Array, %TypedArray%}.prototype.find and{Array, %TypedArray%}.prototype.findIndex to find an element or its index in the array that satisfies a provided condition.

However, the language does not provide a method to find an elementfrom the last to the first of an array with a condition function.

[...[]].reverse().find() is a workaround but there are two issues:

  1. unnecessary mutation (by reverse).
  2. unnecessary copy (to avoid mutation)

For.findIndex(), you are required to perform additional steps after calling the method (re-calculate the index and handle the-1) to calculate the result of[...arr].reverse().findIndex().

Therefore there is a third issue:

  1. complex index calculation

So, perhaps we need something directly and effectively. In this proposal, they are{Array, %TypedArray%}.prototype.findLast and{Array, %TypedArray%}.prototype.findLastIndex.

Scenarios

  • You know find from last may have better performance (The target element on the tail of the array, could append withpush orconcat in a queue or stack, eg: recently matched time point in a timeline).
  • You care about the order of the elements (May have duplicate item in the array, eg: last odd in the list of numbers).
  • Etc.

Core features

Add{Array, %TypedArray%}.prototype.findLast and{Array, %TypedArray%}.prototype.findLastIndex.

This would behave the same asArray.prototype.find andArray.prototype.findIndex but would iterate from the last to the first.

eg:

constarray=[{value:1},{value:2},{value:3},{value:4}];array.find(n=>n.value%2===1);// { value: 1 }array.findIndex(n=>n.value%2===1);// 0// ======== Before the proposal ===========// find[...array].reverse().find(n=>n.value%2===1);// { value: 3 }// findIndexarray.length-1-[...array].reverse().findIndex(n=>n.value%2===1);// 2array.length-1-[...array].reverse().findIndex(n=>n.value===42);// should be -1, but 4// ======== In the proposal ===========// findarray.findLast(n=>n.value%2===1);// { value: 3 }// findIndexarray.findLastIndex(n=>n.value%2===1);// 2array.findLastIndex(n=>n.value===42);// -1

Slides

Polyfill

Related

Proposer

Champions:

  • @Kingwl (Wenlu Wang, KWL)
  • @DanielRosenwasser (Daniel Rosenwasser, DRR)

About

Proposal for Array.prototype.findLast and Array.prototype.findLastIndex.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Languages


[8]ページ先頭

©2009-2025 Movatter.jp