От време на време трябва да попълня масив с някои липсващи стойности, например когато имам масив като този: [1, 5, 6] и трябва да намеря липсващите числа между 1 и 5, като използвам някаква стъпкова стойност, напр. . 1, като в кода по-долу.

Измислих това решение и го споделям, за да не се налага да:

В началото е малко смущаващо, защото използването на reduce всъщност увеличава броя на елементите, но това е добре, стига резултатът да е един масив и да няма мутация или странични ефекти.

Може да забележите, че има за и ако нещо не функционира, то циклите определено не са. Така че излязох с ново решение, което е напълно функционално: без мутации, без цикли, без странични ефекти, само чисти функции.

В този започвам с празен масив, който има толкова елементи, колкото крайният трябва да има. Би било много лесно да използвате някаква функция range() тук, но за съжаление няма такова нещо като javascript, така че е необходимо известно хакване.

const empty = Array(range + 1).fill({})

Изглежда странно, признавам: първо създава масив с необходимия брой елементи и след това извиква запълване с празен обект. Последното е неизбежно, защото Array(number) поставя само празни елементи в масива, така че повторенията не работят:

> const f = Array(3)
undefined
> f.map(()=> console.log('one step'))
[ <3 empty items> ]
> [1,2,3].map(()=> console.log('one step'))
one step
one step
one step
[ undefined, undefined, undefined ]

Но след това всичко е рационализирано. Преглеждам този нов масив и връщам оригиналния елемент, ако съществува, или empty, ако не е в резултатния масив.