如何根据自定义提供的键和值数据创建记录?
How does one create a record, based on custom provided key and value data?
我仍然是 JavaScript 的初学者,我需要根据用户在输入字段中键入的内容创建一个对象。
这是我表单上的输入字段:
用户输入列和值的值后,这是接收数据的方式:
[
[{
label: "Column",
value: "column1",
name: "01",
},
{
label: "Value",
value: "value1",
name: "02",
},
],
[{
label: "Column",
value: "column2",
name: "10",
},
{
label: "Value",
value: "value2",
name: "11",
},
],
];
但是发送数据库不是这样保存的,我需要发送的方式是这样的:
{
// other data
"column_names": {
"column1": "value1",
"column2": "value2"
}
}
你能告诉我如何根据用户输入的内容创建对象吗?但是在我在第二个代码片段中显示的结构中?
您的预期结果是基于对象设计的,您可以按名称对值进行分组,这有点冗长,但如果您想改进对象设计以完成相同的任务,我有建议的代码试试这个
在输入字段上使用 data
属性及其名称
然后获取一个对象中的所有值及其相应的键名,请参见下面的示例
function getData(root){
const Els = root.querySelectorAll("[data]"),newOb = {}
Els.forEach(each=>{
let key = each.getAttribute("data"), val = each.value
newOb[key] = val
})
return newOb
}
const main = document.querySelector(".root")
main.oninput = function(){console.log(getData(main))}
<div class="root">
<input class="border" data="col1" type="text">
<input class="border" data="col2" type="text">
<input class="border" data="col3" type="text">
<input class="border" data="col4" type="text">
</div>
OP 提供的数据结构可以看作是一个对象条目数组,其中每个条目包含一个键和值相关元数据的元组。
因此,一种直接的方法是 reduce
将提供的数据放入所需的记录中。
const receivedData = [
[{
label: "Column",
value: "column1",
name: "01",
}, {
label: "Value",
value: "value1",
name: "02",
}], [{
label: "Column",
value: "column2",
name: "10",
}, {
label: "Value",
value: "value2",
name: "11",
}],
];
const recordData = {
// other data
"column_names": receivedData
.reduce((data, [ keyData, valueData ]) => {
const key = keyData.value;
const { value } = valueData;
return Object.assign(data, { [key]: value });
}, {})
};
console.log({ recordData });
.as-console-wrapper { min-height: 100%!important; top: 0; }
我仍然是 JavaScript 的初学者,我需要根据用户在输入字段中键入的内容创建一个对象。
这是我表单上的输入字段:
用户输入列和值的值后,这是接收数据的方式:
[
[{
label: "Column",
value: "column1",
name: "01",
},
{
label: "Value",
value: "value1",
name: "02",
},
],
[{
label: "Column",
value: "column2",
name: "10",
},
{
label: "Value",
value: "value2",
name: "11",
},
],
];
但是发送数据库不是这样保存的,我需要发送的方式是这样的:
{
// other data
"column_names": {
"column1": "value1",
"column2": "value2"
}
}
你能告诉我如何根据用户输入的内容创建对象吗?但是在我在第二个代码片段中显示的结构中?
您的预期结果是基于对象设计的,您可以按名称对值进行分组,这有点冗长,但如果您想改进对象设计以完成相同的任务,我有建议的代码试试这个
在输入字段上使用 data
属性及其名称
然后获取一个对象中的所有值及其相应的键名,请参见下面的示例
function getData(root){
const Els = root.querySelectorAll("[data]"),newOb = {}
Els.forEach(each=>{
let key = each.getAttribute("data"), val = each.value
newOb[key] = val
})
return newOb
}
const main = document.querySelector(".root")
main.oninput = function(){console.log(getData(main))}
<div class="root">
<input class="border" data="col1" type="text">
<input class="border" data="col2" type="text">
<input class="border" data="col3" type="text">
<input class="border" data="col4" type="text">
</div>
OP 提供的数据结构可以看作是一个对象条目数组,其中每个条目包含一个键和值相关元数据的元组。
因此,一种直接的方法是 reduce
将提供的数据放入所需的记录中。
const receivedData = [
[{
label: "Column",
value: "column1",
name: "01",
}, {
label: "Value",
value: "value1",
name: "02",
}], [{
label: "Column",
value: "column2",
name: "10",
}, {
label: "Value",
value: "value2",
name: "11",
}],
];
const recordData = {
// other data
"column_names": receivedData
.reduce((data, [ keyData, valueData ]) => {
const key = keyData.value;
const { value } = valueData;
return Object.assign(data, { [key]: value });
}, {})
};
console.log({ recordData });
.as-console-wrapper { min-height: 100%!important; top: 0; }