Flatten Deeply Nested Object

const FlattenObject = (OBJ) => {
  const flattenObject = {};
  function generateFlattenObject(OBJ, parent) {
    for (let key in OBJ) {
      let newParent = parent + key;
      let result = OBJ[key];
      if (typeof result === "object") {
        generateFlattenObject(result, newParent + ".");
      } else {
        flattenObject[newParent] = result;
      }
    }
  }
  generateFlattenObject(OBJ, "");
  return flattenObject;
};

const OBJ = {
  A: "12",
  B: 23,
  C: {
    P: 23,
    O: {
      L: 56,
    },
    Q: [1, 2],
  },
};

console.log(FlattenObject(OBJ));
// Output:
{ A: '12', B: 23, 'C.P': 23, 'C.O.L': 56, 'C.Q.0': 1, 'C.Q.1': 2 }