-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy path2705-compact-object.js
32 lines (30 loc) · 983 Bytes
/
2705-compact-object.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* 2705. Compact Object
* https://leetcode.com/problems/compact-object/
* Difficulty: Medium
*
* Given an object or array obj, return a compact object.
*
* A compact object is the same as the original object, except with keys containing falsy
* values removed. This operation applies to the object and any nested objects. Arrays are
* considered objects where the indices are keys. A value is considered falsy when
* Boolean(value) returns false.
*
* You may assume the obj is the output of JSON.parse. In other words, it is valid JSON.
*/
/**
* @param {Object|Array} obj
* @return {Object|Array}
*/
var compactObject = function(obj) {
if (obj === null) return null;
if (Array.isArray(obj)) return obj.filter(Boolean).map(compactObject);
if (typeof obj !== 'object') return obj;
return Object.keys(obj).reduce((result, key) => {
const value = compactObject(obj[key]);
if (value) {
result[key] = value;
}
return result;
}, {});
};