{"ScriptPreparationCode":"// Test Data Generator\r\nfunction generateTestObject(depth, breadth, nullPercentage) {\r\n if (depth === 0) {\r\n return Math.random() \u003C nullPercentage ? null : \u0027value_\u0027 \u002B Math.random();\r\n }\r\n \r\n const obj = {};\r\n for (let i = 0; i \u003C breadth; i\u002B\u002B) {\r\n const shouldBeNull = Math.random() \u003C nullPercentage;\r\n obj[\u0060key_${i}\u0060] = shouldBeNull ? null : generateTestObject(depth - 1, breadth, nullPercentage);\r\n }\r\n return obj;\r\n}\r\n\r\n// Test Cases\r\nvar shallowSparse = generateTestObject(2, 10, 0.3); // 30% nulls, shallow\r\nvar deepSparse = generateTestObject(5, 5, 0.3); // 30% nulls, deep nesting\r\nvar shallowDense = generateTestObject(2, 20, 0.5); // 50% nulls, many keys\r\nvar deepDense = generateTestObject(4, 10, 0.6); // 60% nulls, very nested","TestCases":[{"Name":"Onyx implementation","Code":"function removeNestedNullValues(value) {\r\n if (value === null || value === undefined || typeof value !== \u0027object\u0027) {\r\n return value;\r\n }\r\n if (Array.isArray(value)) {\r\n return [...value];\r\n }\r\n const result = {};\r\n for (const key in value) {\r\n const propertyValue = value[key];\r\n if (propertyValue === null || propertyValue === undefined) {\r\n continue;\r\n }\r\n if (typeof propertyValue === \u0027object\u0027 \u0026\u0026 !Array.isArray(propertyValue)) {\r\n result[key] = removeNestedNullValues(propertyValue);\r\n } else {\r\n result[key] = propertyValue;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nremoveNestedNullValues(shallowSparse);\r\nremoveNestedNullValues(deepSparse);\r\nremoveNestedNullValues(shallowDense);\r\nremoveNestedNullValues(deepDense);","IsDeferred":false},{"Name":"In place deletion","Code":"function removeNullsInPlace(obj) {\r\n if (obj === null || obj === undefined || typeof obj !== \u0027object\u0027) {\r\n return obj;\r\n }\r\n if (Array.isArray(obj)) {\r\n return obj;\r\n }\r\n for (const key in obj) {\r\n if (obj[key] === null || obj[key] === undefined) {\r\n delete obj[key];\r\n } else if (typeof obj[key] === \u0027object\u0027 \u0026\u0026 !Array.isArray(obj[key])) {\r\n removeNullsInPlace(obj[key]);\r\n }\r\n }\r\n return obj;\r\n}\r\nremoveNullsInPlace(shallowSparse);\r\nremoveNullsInPlace(deepSparse);\r\nremoveNullsInPlace(shallowDense);\r\nremoveNullsInPlace(deepDense);","IsDeferred":false},{"Name":"Shallow only","Code":"function removeNullsShallow(obj) {\r\n if (obj === null || obj === undefined || typeof obj !== \u0027object\u0027 || Array.isArray(obj)) {\r\n return obj;\r\n }\r\n const result = {};\r\n for (const key in obj) {\r\n if (obj[key] !== null \u0026\u0026 obj[key] !== undefined) {\r\n result[key] = obj[key];\r\n }\r\n }\r\n return result;\r\n}\r\nremoveNullsShallow(shallowSparse);\r\nremoveNullsShallow(deepSparse);\r\nremoveNullsShallow(shallowDense);\r\nremoveNullsShallow(deepDense);","IsDeferred":false},{"Name":"Filter based","Code":"function removeNullsFunctional(obj) {\r\n if (obj === null || obj === undefined || typeof obj !== \u0027object\u0027) {\r\n return obj;\r\n }\r\n if (Array.isArray(obj)) {\r\n return [...obj];\r\n }\r\n return Object.fromEntries(\r\n Object.entries(obj)\r\n .filter(([_, v]) =\u003E v !== null \u0026\u0026 v !== undefined)\r\n .map(([k, v]) =\u003E [k, typeof v === \u0027object\u0027 \u0026\u0026 !Array.isArray(v) ? removeNullsFunctional(v) : v])\r\n );\r\n}\r\nremoveNullsFunctional(shallowSparse);\r\nremoveNullsFunctional(deepSparse);\r\nremoveNullsFunctional(shallowDense);\r\nremoveNullsFunctional(deepDense);","IsDeferred":false}]}