Skip to content

Instantly share code, notes, and snippets.

@kraftdorian
Last active March 12, 2023 17:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kraftdorian/c36a23544f3745378db15c40acfd7c1d to your computer and use it in GitHub Desktop.
Save kraftdorian/c36a23544f3745378db15c40acfd7c1d to your computer and use it in GitHub Desktop.
Transform 2-D array to 1-D array
flatten2DList :: [[a]] -> [a] -> [a]
flatten2DList (x:[]) acc = acc ++ x
flatten2DList (x:xs) acc = flatten2DList xs (acc ++ x)
-- or just use concat
flatten2DList' :: [[a]] -> [a]
flatten2DList' x = concat x
/**
* @param {Array<Array<unknown>>} arr 2D array to transform into one-dimensional array
* @return {Array<unknown>|null} one-dimensional array if 2D array was provided, null otherwise
*/
function mapTo1DArray(arr) {
if (arr == null || !Array.isArray(arr) || !Array.isArray(arr[0])) {
return null;
}
const result = new Array(arr[0].length * arr.length);
let ptr = 0,
yPtr = 0,
xPtr = 0;
while (ptr < result.length) {
result[ptr++] = arr[yPtr][xPtr];
xPtr++;
if (xPtr > arr[0].length - 1) {
// last column of current row was reached,
// reset X pointer to 0 and move to the next row by increasing Y pointer
xPtr = 0;
yPtr++;
}
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment