function matrixClone(matrix, defaultValue) {
  return matrix.map(row => {
    return defaultValue === undefined
      ? row.slice(0)
      : Array(row.length).fill(defaultValue);
  });
}

const deepEqual = require('./deepEqual');

// Test clone.
const a = [[1, 2], [1, 4]];
console.log(deepEqual(matrixClone(a), [[1, 2], [1, 4]]));
a[0][0] = 4;
console.log(deepEqual(matrixClone(a), [[1, 2], [1, 4]]) === false);
console.log(deepEqual(matrixClone([[1]]), [[1]]));

// Test clone with default value.
console.log(deepEqual(matrixClone([[1, 2], [1, 4]], 1), [[1, 1], [1, 1]]));
console.log(
  deepEqual(matrixClone([[1, 2], [1, 4]], null), [[null, null], [null, null]]),
);