Skip to content

Commit f0842dd

Browse files
committed
fix: improve primitive types handling on flattenObject
1 parent 60dc371 commit f0842dd

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

demo/Form2Examples.jsx

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export function Form2Examples() {
1818
w: {
1919
z: formData.__v ? formData.__v * 2 : 1,
2020
},
21+
t: formData.__v % 2 ? null : undefined,
22+
u: new Date(),
2123
},
2224
arr: formData.arr.map((v) => parseFloat(v) + 1),
2325
arrObj: formData.arrObj.map((v) => {

src/utils/getters-setters.js

+7-11
Original file line numberDiff line numberDiff line change
@@ -105,24 +105,20 @@ export function deepClone(item) {
105105
}
106106

107107
export function flattenObject(data, prefix = '') {
108-
if (isPrimitive(data)) {
108+
if (isArray(data)) {
109+
return data.reduce((result, v, index) => ({ ...result, ...flattenObject(v, `${prefix}[${index}]`) }), {});
110+
}
111+
112+
if (isPrimitive(data) || !isPlainObject(data)) {
109113
if (prefix.length === 0) {
110-
throw new Error('cannot flatten primitive types without a prefix');
114+
throw new Error('cannot flatten type without a prefix');
111115
}
112116

113117
return {
114118
[prefix]: data,
115119
};
116120
}
117121

118-
if (isArray(data)) {
119-
return data.reduce((result, v, index) => ({ ...result, ...flattenObject(v, `${prefix}[${index}]`) }), {});
120-
}
121-
122-
if (!isPlainObject(data)) {
123-
throw new Error('unknow type');
124-
}
125-
126122
return Object.entries(data).reduce((result, [key, value]) => {
127123
const prefixedKey = `${prefix ? `${prefix}.` : ''}${key}`;
128124

@@ -142,5 +138,5 @@ export function flattenObject(data, prefix = '') {
142138
}
143139

144140
function isPrimitive(v) {
145-
return isString(v) || isNumber(v) || isBoolean(v);
141+
return isString(v) || isNumber(v) || isBoolean(v) || isNull(v) || isUndefined(v);
146142
}

0 commit comments

Comments
 (0)