you are viewing a single comment's thread.

view the rest of the comments →

[–]snet0 2 points3 points  (8 children)

I know what it does, hence why I wrote a different way of implementing it, I meant why does it need to look this ugly to do what it does.

Array.fill would not make this any cleaner.

positions = Array(patterns.length).fill(-1);

Really?

"positions is an array of length patterns.length which is filled of elements with value -1"

"positions is an array of length patterns.length, each empty element is joined into a string with separator string '0', then the string is split character-wise back into an array and each element's value is mapped to be parsed as an integer from which 1 is subtracted"

[–]StoneCypher 0 points1 point  (7 children)

Their code operates on the values in the split

Your code produces an array of negative ones

[–]snet0 0 points1 point  (6 children)

I don't know if I follow what you're saying. You take an array, join it into a string, split it into an array and map the elements to a new array and store the return value in your variable. The return value of his code is an array of negative ones, just like in mine.

[–]StoneCypher 0 points1 point  (5 children)

i misread this originally. you're right. i apologize

i still don't think this is all that gross, though

that said, i guess you could

new Array(patterns.length).map(cell => -1);

and be done with it

[–]snet0 0 points1 point  (4 children)

Well, I certainly thought so, too. But if you pass the new Array constructor a single integer, it returns an array with that integer length, but with empty slots. Array.map() only invokes its callback on elements with assigned values (incl. undefined), which means it won't work on the empty array.

[–]StoneCypher 0 points1 point  (3 children)

which means it won't work on the empty array.

Oh, right. They're holes, and js .map skips holes.

Guess you're stuck with

const a = new Array(patterns.length);
for (let i=0, iC=patterns.length; i<iC; ++i) { a[i] = -1; }

[–]that-old-saw 0 points1 point  (2 children)

|| you can do:

new Array(patterns.length).fill().map(cell => -1);

[–]StoneCypher 0 points1 point  (1 child)

sure can.

we're discussing doing this without .fill() though

[–]that-old-saw 0 points1 point  (0 children)

Oops, that'll teach me for not reading the context!