Flatten Array and Deep Clone

These exercises test recursion and reference handling.

Flatten array

function flatten(input) {
  const result = []

  for (const item of input) {
    if (Array.isArray(item)) {
      result.push(...flatten(item))
    } else {
      result.push(item)
    }
  }

  return result
}

flatten([1, [2, [3, 4]]]) // [1, 2, 3, 4]

Deep clone

Simple version:

function deepClone(value) {
  if (value === null || typeof value !== 'object') {
    return value
  }

  if (Array.isArray(value)) {
    return value.map(deepClone)
  }

  const result = {}

  for (const key in value) {
    result[key] = deepClone(value[key])
  }

  return result
}

Edge cases to discuss

Real deep clone can be harder because of:

For interviews, mention these limitations.