Flattening an array and little more.
![Polar The Explorer](https://cdn.hashnode.com/res/hashnode/image/upload/v1735316285257/b769e547-fa02-4e05-824e-a423c70d8a35.jpeg?w=500&h=500&fit=crop&crop=entropy&auto=compress,format&format=webp)
![](https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/geNNFqfvw48/upload/a2e46d3639f434b4edc3b273ddb6156d.jpeg)
Interviewing coders requires smart and insightful questions to differentiate between those who truly understand coding concepts and those who rely solely on memorised answers. Below are a series of array manipulation questions designed to challenge candidates, complete with explanations and code examples.
I usually believe to put easy questions first and slowly increase the complexity of questions so that candidate feel confident and also warmed up.
Question 1: Basic Array Flattening
Input: [[1, 2], [3, [4, [5, 6]]], 7]
Output: [1, 2, 3, 4, 5, 6, 7]
function flattenArray(arr) {
return arr.reduce((acc, val) => {
return Array.isArray(val) ? acc.concat(flattenArray(val)) : acc.concat(val);
}, []);
}
// Example usage
let input = [[1, 2], [3, [4, [5, 6]]], 7];
console.log(flattenArray(input)); // Output: [1, 2, 3, 4, 5, 6, 7]
Question 2: Flattening While Tracking Nesting Levels
Input: [[1, 2], [3, [4, [5, 6]]], 7]
Output: ['1-1', '2-1', '3-1', '4-2', '5-3', '6-3', '7-0']
function flattenWithLevels(arr, level = 0) {
let result = [];
arr.forEach(item => {
if (Array.isArray(item)) {
result = result.concat(flattenWithLevels(item, level + 1));
} else {
result.push(`${item}-${level}`);
}
});
return result;
}
// Test the function
let input = [[1, 2], [3, [4, [5, 6]]], 7];
console.log(flattenWithLevels(input)); // Output: ['1-1', '2-1', '3-1', '4-2', '5-3', '6-3', '7-0']
Question 3: Reconstructing the Nested Array
Input: ['1-1', '2-1', '3-1', '4-2', '5-3', '6-3', '7-0']
Output: [[1, 2], [3, [4, [5, 6]]], 7]
function reconstructNestedArray(arr) {
let result = [];
let stack = [{ array: result, level: -1 }];
arr.forEach(item => {
let [value, level] = item.split('-').map(Number);
while (stack[stack.length - 1].level >= level) {
stack.pop();
}
let currentArray = stack[stack.length - 1].array;
let newArray = [];
currentArray.push(level > stack[stack.length - 1].level ? newArray : value);
if (level > stack[stack.length - 1].level) {
stack.push({ array: newArray, level: level });
}
});
return result;
}
// Test the function
let input = ['1-1', '2-1', '3-1', '4-2', '5-3', '6-3', '7-0'];
console.log(reconstructNestedArray(input)); // Output: [[1, 2], [3, [4, [5, 6]]], 7]
Final Thoughts
These questions test not only a candidate's ability to manipulate arrays but also their ability to think critically and adapt solutions as complexity increases. Candidates who solve these problems demonstrate a strong understanding of recursion, data structures, and logical problem-solving.
Happy coding and interviewing!
Subscribe to my newsletter
Read articles from Polar The Explorer directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
![Polar The Explorer](https://cdn.hashnode.com/res/hashnode/image/upload/v1735316285257/b769e547-fa02-4e05-824e-a423c70d8a35.jpeg?w=500&h=500&fit=crop&crop=entropy&auto=compress,format&format=webp)