splice
function splice( tab, idx [, n [, ...]] ) --> removed
Description
Changes the content of an array table, adding new elements while removing old elements. It is possible to use negative numbers to identifie the first and last element of the sub-array.
Parameters
- tab
-
The array tables where you want to remove or replace elements
- idx
-
Index at which to start changing the array table. If greater than the length of the array, actual starting index will be set to the length of the array. If negative, will begin that many elements from the end.
- n
-
An integer indicating the number of old elements to remove. If n is 0, no elements are removed. In this case, you should specify at least one new element(…). If n is greater than the number of elements left in the array starting at index, then all of the elements through the end of the array will be deleted. If no n parameter is specified, all elements after index are removed.
- …
-
The elements to add to the array. If no elements are specified, splice simply removes elements from the array table.
Return Values
- removed
-
An array table containing the removed elements. If only one element is removed, an array of one element is returned. If no elements are removed, an empty array is returned.
Code
--ZFUNC-splice-v1 local function splice( tab, idx, n, ... ) --> removed local values = { ... } local init_tab_size = #tab local removed = {} if n > 0 then for i = idx, ( idx + n - 1 ) do table.insert( removed, tab[ i ] ) tab[ i ] = nil end end local tail = {} for i = ( idx + n ), init_tab_size do table.insert( tail, tab[ i ] ) tab[ i ] = nil end local i = idx for _, v in ipairs( values ) do tab[ i ] = v i = i + 1 end i = idx + #values for _, v in ipairs( tail ) do tab[ i ] = v i = i + 1 end return removed end return splice
Examples
local t = require( "taptest" ) local same = require( "same" ) local splice = require( "splice" ) -- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice -- should work like the JavaScript Array.prototype.splice function" local fishlist = { "angel", "clown", "mandarin", "surgeon" } local removed = splice( fishlist, 3, 0, "drum" ) t( same( fishlist, { "angel", "clown", "drum", "mandarin", "surgeon" } ), true ) t( same( removed, {} ), true ) removed = splice( fishlist, 4, 1 ) t( same( fishlist, { "angel", "clown", "drum", "surgeon" } ), true ) t( same( removed, { "mandarin" } ), true ) removed = splice( fishlist, 3, 1, "trumpet" ) t( same( fishlist, { "angel", "clown", "trumpet", "surgeon" } ), true ) t( same( removed, { "drum" } ), true ) removed = splice( fishlist, 1, 2, "parrot", "anemone", "blue" ) t( same( fishlist, { "parrot", "anemone", "blue", "trumpet", "surgeon" } ), true ) t( same( removed, { "angel", "clown" } ), true ) removed = splice( fishlist, 4, 8000 ) t( same( fishlist, { "parrot", "anemone", "blue" } ), true ) t( same( removed, { "trumpet", "surgeon" } ), true ) t()