Total Complexity | 7 |
Complexity/F | 2.33 |
Lines of Code | 42 |
Function Count | 3 |
Duplicated Lines | 0 |
Ratio | 0 % |
Changes | 0 |
1 | import { isObject, isArray } from './checkType'; |
||
2 | |||
3 | /** |
||
4 | * cleans object from undefined fields recursievly |
||
5 | * @param {Object} obj primitive for examination |
||
6 | * @returns {Object} object without undefined fields |
||
7 | */ |
||
8 | export function cleanUndefined(obj, { cache = new Set() } = {}) { |
||
9 | cache.add(obj); |
||
10 | for (const key of Object.keys(obj)) { |
||
11 | if (obj[key] === undefined) delete obj[key]; // eslint-disable-line no-param-reassign |
||
|
|||
12 | if (isObject(obj[key])) { |
||
13 | if (cache.has(obj[key])) continue; |
||
14 | cleanUndefined(obj[key], { cache }); |
||
15 | } |
||
16 | } |
||
17 | |||
18 | return obj; |
||
19 | } |
||
20 | |||
21 | /** |
||
22 | * create deep clone of object |
||
23 | * @param {Object} x input object |
||
24 | * @returns {Object} deep copy |
||
25 | * |
||
26 | * Note that object can't have circular references |
||
27 | */ |
||
28 | export function clone(x) { |
||
29 | return JSON.parse(JSON.stringify(x)); |
||
30 | } |
||
31 | |||
32 | /** |
||
33 | * determines whether the object or array is empty |
||
34 | * @param {any} x primitive for examination |
||
35 | * @returns {boolean} true if x is empty or false otherwise |
||
36 | */ |
||
37 | export function isEmpty(x) { |
||
38 | const isObjectEmpty = isObject(x) && Object.keys(x).length === 0; |
||
39 | const isArrayEmpty = isArray(x) && x.keys(x).length === 0; |
||
40 | |||
41 | return isObjectEmpty || isArrayEmpty; |
||
42 | } |
||
43 |
Consider adding curly braces around all statements when they are executed conditionally. This is optional if there is only one statement, but leaving them out can lead to unexpected behaviour if another statement is added later.
Consider:
If you or someone else later decides to put another statement in, only the first statement will be executed.
In this case the statement
b = 42
will always be executed, while the logging statement will be executed conditionally.ensures that the proper code will be executed conditionally no matter how many statements are added or removed.