DEV Community

Discussion on: Built-in-like Range in JavaScript

Collapse
 
jonrandy profile image
Jon Randy 🎖️ • Edited

I'm planning to build something similar, but with 'safe' monkey patching using Symbols. I think I'll end up with a syntax something like:

4[to](7) // [4, 5, 6, 7]
[ ...1[to](3), ...10[to](15) ] // [1, 2, 3, 10, 11, 12, 13, 14, 15]

(4)[to](7) // alternative way to write it
Enter fullscreen mode Exit fullscreen mode

Or maybe (not sure this is possible safely):

4[to(7)] // [4, 5, 6, 7]
[ ...1[to(3)], ...10[to(15)] ] // [1, 2, 3, 10, 11, 12, 13, 14, 15]
Enter fullscreen mode Exit fullscreen mode

Which syntax do you prefer? (I'm leaning towards the former)

Collapse
 
jonrandy profile image
Jon Randy 🎖️

Could even expand it to:

1[to](19, {step: 2})) // [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
Enter fullscreen mode Exit fullscreen mode

etc.

Collapse
 
didof profile image
Francesco Di Donato • Edited

It's an amazing idea, Jon. I find the second option more readable. Or, at least, it feels "righter". But I'm not sure it could work since a function cannot be used as a key in a plain object.
Anyway, I'd like to work on it, together. Would you like to?

Thread Thread
 
jonrandy profile image
Jon Randy 🎖️

I already did a POC in about 5 lines of code - works perfectly

Thread Thread
 
jonrandy profile image
Jon Randy 🎖️

Still trying to think of a way to make the second syntax work without unsafe monkey patching. I'm not sure it's possible. My POC uses the a[to](b) syntax. Basically, to is a method on the number prototype... nothing particularly fancy going on

Thread Thread
 
jonrandy profile image
Jon Randy 🎖️

I think there is a way to do the 2nd syntax... I'll get back to you

Thread Thread
 
jonrandy profile image
Jon Randy 🎖️ • Edited

It works 👍 And it's safe

Thread Thread
 
didof profile image
Francesco Di Donato

I'm glad to read it. If you like to share I'd love to see it!