ah, this is why you use the third argument to map functions, which passes the array being mapped - a correct line 9 could shadow it by changing the invocation to `.map((item, i, items) => {`
one could also argue that `items` ought to come in as an argument, and whatever larger object provides an argumentless variant for a fixed `items` should be binding that function in its constructor
yeah, for all my griping about how JavaScript code ought to embrace lexical scoping more heavily, seeing it being spelled `this.items` probably would have made this bug a little more obvious to me