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

我有一个从 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;


狐的传说
浏览 164回答 3
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; }

凤凰求蛊

你可以使用这样的东西: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与条目键匹配的对象的值生成一个新对象。

ibeautiful

此代码可以为您完成: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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript