90 lines
1.8 KiB
TypeScript
90 lines
1.8 KiB
TypeScript
export function getModel(model: Recordable) {
|
|
const data: Recordable = {};
|
|
|
|
for (const [key, value] of Object.entries(model)) {
|
|
if (value === '') {
|
|
continue;
|
|
}
|
|
if (/^\[.+\]$/.test(key)) {
|
|
getModelArray(key, value, data);
|
|
continue;
|
|
}
|
|
if (/^\{.+\}$/.test(key)) {
|
|
getModelObject(key, value, data);
|
|
continue;
|
|
}
|
|
data[key] = value;
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
export function setModel(model: Recordable, data: Recordable) {
|
|
for (const [key, value] of Object.entries(model)) {
|
|
if (/^\[.+\]$/.test(key)) {
|
|
model[key] = setModelArray(data, key);
|
|
continue;
|
|
}
|
|
if (/^\{.+\}$/.test(key)) {
|
|
model[key] = setModelObject(data, key);
|
|
continue;
|
|
}
|
|
model[key] = data[key];
|
|
}
|
|
console.log(model, data);
|
|
return model;
|
|
}
|
|
|
|
function rmString(str: string) {
|
|
const field = str.replaceAll(/\s/g, '');
|
|
return field.match(/^(\{|\[)(.+)(\}|\])$/)?.[1] ?? '';
|
|
}
|
|
|
|
function setModelArray(data: Recordable, key: string) {
|
|
const result: any[] = [];
|
|
const field = rmString(key);
|
|
for (const key of field.split(',')) {
|
|
result.push(data[key]);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function setModelObject(data: Recordable, key: string) {
|
|
const result: Recordable = {};
|
|
const field = rmString(key);
|
|
for (const key of field.split(',')) {
|
|
result[key] = data[key];
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function getModelArray(key: string, value: any, data: Recordable) {
|
|
let field = rmString(key);
|
|
|
|
if (!field) {
|
|
data[key] = value;
|
|
return;
|
|
}
|
|
|
|
field.split(',').forEach((key, index) => {
|
|
data[key] = value?.[index];
|
|
});
|
|
|
|
return data;
|
|
}
|
|
|
|
function getModelObject(key: string, value: any, data: Recordable) {
|
|
const field = rmString(key);
|
|
|
|
if (!field) {
|
|
data[key] = value;
|
|
return;
|
|
}
|
|
|
|
for (const key of field.split(',')) {
|
|
data[key] = value?.[key];
|
|
}
|
|
|
|
return data;
|
|
}
|