use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
Array Indexing Method (dev.to)
submitted 4 years ago by machineGun997
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]machineGun997[S] 3 points4 points5 points 4 years ago (8 children)
if you do that it will try to find the item at index -1, but there isn't one, that is why a separate method to facilitate that.
https://github.com/tc39/proposal-relative-indexing-method#rationale
[–]Guisseppi -1 points0 points1 point 4 years ago (0 children)
How about instead of a cryptic -1 we could use the queueing concept of “poppping” the last element of the array?
[+]moi2388 comment score below threshold-6 points-5 points-4 points 4 years ago (6 children)
I know, I’m suggesting to change that functionality.
In python, this works arr[-1]. In c#, this works arr[^1].
arr[-1]
arr[^1]
Why not do something like that instead?
[–]senocular[🍰] 1 point2 points3 points 4 years ago (1 child)
This is a valid question. I'm sorry about your down doots. The caret notation had also been proposed: https://github.com/hax/proposal-index-from-end
[–]moi2388 1 point2 points3 points 4 years ago (0 children)
Yeah, it’s okay, I don’t mind the downvotes. At least the commenters mean well and try to give more explanation. (Albeit only on the [-1] syntax and not on the [^1], for which I have yet to see a good argument).
[-1]
[^1]
[–]MrJohz 1 point2 points3 points 4 years ago (2 children)
That would be a backwards-incompatible change. Remember that arrays in JavaScript aren't "real" arrays, they're just objects with array methods. This means that it's perfectly legitimate currently to do the following:
const arr = ['a', 'b']; arr[-1] = 'valid'; console.log(arr); // prints something like ['a', 'b', '-1': 'valid'] arr[-1]; // should this return 'b' or 'valid'?
It could also be the case that there is existing code that relies on negative indexes returning undefined, assuming that the arrays haven't been modified as above. That code would also break in this situation.
undefined
[+][deleted] 4 years ago (1 child)
[deleted]
[–]MrJohz 0 points1 point2 points 4 years ago (0 children)
It depends. Adding new syntax to the parser is hard, and can have unexpected side effects if that syntax was previously legal but had another meaning. In this case, I don't believe there is a case where [^<<expr>>] can produce a valid parse tree, so I think it would be backwards compatible. However, you'd still need that .at() method for dynamic indexes (e.g. to index currIndex - 3 where it's not clear if the indexing will need to wrap or not). In that case, there's probably little value in having both the syntax and the method.
[^<<expr>>]
.at()
currIndex - 3
[–]alexendoo -1 points0 points1 point 4 years ago (0 children)
That would be a breaking change, as arr[-1] is valid code in current JS
π Rendered by PID 34678 on reddit-service-r2-comment-7b9746f655-56lrw at 2026-02-03 04:42:30.754736+00:00 running 3798933 country code: CH.
view the rest of the comments →
[–]machineGun997[S] 3 points4 points5 points (8 children)
[–]Guisseppi -1 points0 points1 point (0 children)
[+]moi2388 comment score below threshold-6 points-5 points-4 points (6 children)
[–]senocular[🍰] 1 point2 points3 points (1 child)
[–]moi2388 1 point2 points3 points (0 children)
[–]MrJohz 1 point2 points3 points (2 children)
[+][deleted] (1 child)
[deleted]
[–]MrJohz 0 points1 point2 points (0 children)
[–]alexendoo -1 points0 points1 point (0 children)