javascript - 以特定方式保存数据
问题描述
我有一个应用程序,用户必须输入有关它的数据,保存后form
,数据应该以某种形式输出。
const ParrentForm = () => {
const [carNr, setCarNr] = useState([]);
const onFinish = (values) => {
const { firstName, lastName } = values;
const user = {
firstName,
lastName,
things: {
cars: []
}
};
console.log(user);
};
const onFinishFailed = (errorInfo) => {
console.log("Failed:", errorInfo);
};
const setFloorsNrHandler = (nr) => {
setCarNr(Array.from({ length: nr }, (v, k) => k));
};
return (
<div>
<Form
name="main"
initialValues={{ remember: true }}
onFinish={onFinish}
onFinishFailed={onFinishFailed}
>
<Form.Item
label="First Name"
name="firstName"
rules={[{ required: true, message: "Please input your first name!" }]}
>
<Input />
</Form.Item>
<Form.Item
label="Last Name"
name="lastName"
rules={[{ required: true, message: "Please input your last name!" }]}
>
<Input />
</Form.Item>
<Form.Item
name="nrOfCars"
label="Cars"
rules={[{ type: "number", min: 0, max: 15 }]}
>
<InputNumber onChange={setFloorsNrHandler} />
</Form.Item>
{carNr.map((f, k) => {
return (
<Form.Item key={k}>
<InnerForm cKey={k} />
</Form.Item>
);
})}
<Form.Item>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
</Form>
</div>
);
};
export default ParrentForm;
预期数据应如下所示:
{
"user": {
"firstName": "Bill",
"lastName": "M.",
},
"things": {
"cars": [
{
"nr": 1,
"carsList": [
{
"name": "Car 1",
"nr": 1
},
{
"name": "Audi",
"nr": 2
},
,
{
"name": "Mercedes",
"nr": 3
}
]
},
{
"nr": 2,
"carsList": [
{
"name": "Bmw",
"nr": 1
}
]
}
]
}
}
如何修改onFinish
函数内部的数据以获得上述结果?
演示:https ://codesandbox.io/s/modest-cache-o0g65?file=/OuterForm.js:136-1755
解决方案
首先,您必须结合展开运算符 ( doc ) 破坏 ( doc ) 表单值对象以获取与汽车相关的值(我存储在 variable 中)。在那之后,唯一剩下要做的就是操作那个变量,这里我结合使用和carValues
Object.entries
Array.prototype.map
有一部分Number(key)
,因为Object.entries()
将对象转换为键值对数组,键的类型为字符串,因此您必须将其转换为Number
first 以用于基于 1 的索引
const onFinish = values => {
const { firstName, lastName, nrOfCars, ...carValues } = values
const cars = Object.entries(carValues).map(([key, value]) => ({
nr: Number(key) + 1,
carsList: (value.cars || []).map((car, carIndex) => ({
nr: carIndex + 1,
name: car.name
}))
}))
const user = {
firstName,
lastName,
things: {
cars
}
}
console.log(JSON.stringify(user, null, 2))
}
用于实现的分叉代码和框
推荐阅读
- javascript - 无法使用 javascript 从 AWS S3 存储桶获取文件计数或列表
- android - 我可以在 Google Play 控制台的哪个位置查看我的应用的 Android 版本分布?
- sequelize.js - Sequelize - 包含模块,而 where 子句是可选的
- r - 如何仅使用非 NA 值为每一行数据帧制作 bin?
- android - 实现 .aar 库和上下文问题
- c# - 如何有条件地在linq中添加where条件
- python - Python selenium - 找不到元素
- excel - Excel:动态相关列表
- weka - WEKA Ham 或 Spam J48 显示为灰色
- python - 我的输出如何显示真实的列标题而不是自动增量数字