为了账号安全,请及时绑定邮箱和手机立即绑定

映射 2 对象并根据值创建对象

映射 2 对象并根据值创建对象

狐的传说 2022-01-01 20:13:04
我有一个从 html 表单构建的对象。当我填写表格时,我获得了这个 json 对象,我们称之为“jsonObjectForm”:{  "inputID1": "content1",  "inputID2": "content2",  "inputID3": "content3",  "beginningDate": "2020-02-02",  "endingDate": "2022-03-03",  "inputID4": "content4",  "inputID5": "content5",  "inputID6": "content6",  "inputID7": "content7",  "inputID8": "content8"}我有第二个对象,我必须使用它来构建 sql 查询。这个对象是let fieldNames = {    "inputID1": "dbField1",    "inputID2": "dbField2",    "inputID3": "dbField3",    "inputID4": "dbField4",    "inputID5": "dbField5",    "inputID6": "dbField6",    "inputID7": "dbField7",    "inputID8": "dbField7",};我找到了浏览第一个对象的方法。我在表单中定义了我想要“扫描”的表单元素:const pageFormElements = getAllFormElements(document.getElementById("requestForm"));for(let [key, value] of Object.entries(jsonObjectForm)) {    pageFormElements.forEach(element => {        console.log("key: " + key + " | value: " + value);    }}我的问题是在这种情况下如何管理双 forEach,我想知道是否有办法将值从第一个对象“映射”到第二个对象并构建一个如下所示的最终对象:let fieldNames = {    "dbField1": "content1",    "dbField2": "content2",    "dbField3": "content3",    "dbField4": "content4",    "dbField5": "content5",    "dbField6": "content6",    "dbField7": "content7",    "dbField7": "content8",};我的目标是创建一个这样的查询query = select * from whatever where dbField1 = content1 AND dbField2 = content2 ... AND dbField8 = content8;
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

您可以通过查看带有表达式的键beginning和ending前缀来迭代字段并组合所需的查询BETWEEN。


var data = { inputID1: "content1", inputID2: "content2", inputID3: "content3", beginningDate: "2020-02-02", endingDate: "2022-03-03", inputID4: "content4", inputID5: "content5", inputID6: "content6", inputID7: "content7", inputID8: "content8" },

    fields = { Date: 'date', inputID1: "dbField1", inputID2: "dbField2", inputID3: "dbField3", inputID4: "dbField4", inputID5: "dbField5", inputID6: "dbField6", inputID7: "dbField7", inputID8: "dbField7" },

    result = Object

        .entries(fields)

        .map(([k, v]) => (('beginning' + k) in data) && (('ending' + k) in data)

            ? `${v} BETWEEN '${data['beginning' + k]}' AND '${data['ending' + k]}'`

            : `${v}='${data[k]}'`

        )

        .join(' AND ');


console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反对 回复 2022-01-01
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

你可以使用这样的东西:


const content = {

  "inputID1": "content1",

  "inputID2": "content2",

  "inputID3": "content3",

  "beginningDate": "2020-02-02",

  "endingDate": "2022-03-03",

  "inputID4": "content4",

  "inputID5": "content5",

  "inputID6": "content6",

  "inputID7": "content7",

  "inputID8": "content8"

}


const fieldNames = {

  "inputID1": "dbField1",

  "inputID2": "dbField2",

  "inputID3": "dbField3",

  "inputID4": "dbField4",

  "inputID5": "dbField5",

  "inputID6": "dbField6",

  "inputID7": "dbField7",

  "inputID8": "dbField7",

};


const result = Object.entries(fieldNames).reduce((a, [k, v]) => (a[v] = content[k], a), {});


console.log(result);


这将遍历fieldNames条目并使用条目的值作为键和值,来自content与条目键匹配的对象的值生成一个新对象。


查看完整回答
反对 回复 2022-01-01
?
ibeautiful

TA贡献1993条经验 获得超5个赞

此代码可以为您完成:


const content = {

  "inputID1": "content1",

  "inputID2": "content2",

  "inputID3": "content3",

  "beginningDate": "2020-02-02",

  "endingDate": "2022-03-03",

  "inputID4": "content4",

  "inputID5": "content5",

  "inputID6": "content6",

  "inputID7": "content7",

  "inputID8": "content8"

}


const fieldNames = {

  "inputID1": "dbField1",

  "inputID2": "dbField2",

  "inputID3": "dbField3",

  "inputID4": "dbField4",

  "inputID5": "dbField5",

  "inputID6": "dbField6",

  "inputID7": "dbField7",

  "inputID8": "dbField7",

};

const result = {};

Object.keys(fieldNames).forEach(key => result[fieldNames[key]] = content[key]);

console.log(result);


查看完整回答
反对 回复 2022-01-01
  • 3 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号