this post was submitted on 23 Jan 2024
1 points (100.0% liked)

Programming Horror

1888 readers
1 users here now

Welcome to Programming Horror!

This is a place to share strange or terrible code you come across.

For more general memes about programming there's also Programmer Humor.

Looking for mods. If youre interested in moderating the community feel free to dm @[email protected]

Rules

Credits

founded 1 year ago
MODERATORS
1
submitted 9 months ago* (last edited 9 months ago) by [email protected] to c/[email protected]
 

For those unfamiliar with JS: subValue (the first argument in the forEach callback) is the value contained at arr[index].

top 5 comments
sorted by: hot top controversial new old
[–] [email protected] 0 points 9 months ago* (last edited 9 months ago) (1 children)

Trivially, could also just be a retVal.map(self.cleanupMetadata)

[–] [email protected] 0 points 9 months ago* (last edited 9 months ago)

But it can't! (Maybe)

calling map(obj.func) will pass func but won't set the this parameter correctly. If the called method uses this you will have a bad time.

The code you actually want would be retval.map(v => self.cleanupMetadata(v)) or the old-skool retval.map(self.cleanupMetadata.bind(self)).

Also the first version reuses the Array which may be important, but even if not will likely result in better performance. (Although this is likely mitigated by making the array polymorphic depending on the return type of cleanupMetadata and the overhead of forEach vs map.)

Wow, isn't JS a great language.

[–] [email protected] 0 points 9 months ago (1 children)

Entire block could literally be replaced with arr[index] = self.cleanupMetadata(subValue).

[–] [email protected] 0 points 9 months ago (1 children)
[–] [email protected] 0 points 9 months ago

Figuratively the block could be replaced with a roll of duct tape and some chewing gum.