diff --git a/lua/spec/array_spec.lua b/lua/spec/array_spec.lua index 91291285fb5..820def2d1a9 100644 --- a/lua/spec/array_spec.lua +++ b/lua/spec/array_spec.lua @@ -310,6 +310,13 @@ describe('array', function() describe('Interleave', function () it('works', function() assert.are_same({'a', ' ', 'b', ' ', 'c'}, Array.interleave({'a', 'b', 'c'}, ' ')) + assert.are_same({'a'}, Array.interleave({'a'}, ' ')) + assert.are_same({}, Array.interleave({}, ' ')) + end) + + it('with nested array', function () + local a, b = Array.range(1, 3), math.pi + assert.are_same({{1, 2, 3}, ' ', b}, Array.interleave({a, b}, ' ')) end) end) end) diff --git a/lua/wikis/commons/Array.lua b/lua/wikis/commons/Array.lua index 0bbf15d7bd7..9c2216cf408 100644 --- a/lua/wikis/commons/Array.lua +++ b/lua/wikis/commons/Array.lua @@ -727,13 +727,12 @@ end ---@param x T ---@return (V|T)[] function Array.interleave(elements, x) - local size = #elements - return Array.flatMap(elements, function(element, index) - if index == size then - return {element} - end - return {element, x} - end) + local ret = {elements[1]} + for i = 2, #elements do + table.insert(ret, x) + table.insert(ret, elements[i]) + end + return ret end return Array