【问题标题】:Javascript json object how to move changed data to a new objectJavascript json对象如何将更改的数据移动到新对象
【发布时间】:2021-04-25 12:36:24
【问题描述】:

我有 2 个 json 对象。

第一个保存来自客户端表单的数据。

{
       "name": "Example name",
       "company": {
         "name": "new company",
         "size": "FIVE",
         "licenseInfo": {
            "isActive": "0"
         }
       }
}

在我的另一个对象中,我知道在这个表单中修改了哪些字段。如果 value 为 true,则它已更改。我使用的插件为我提供了这些信息。

{
       "name": true,
       "company": { 
         "size": true,
         "licenseInfo": {
            "isActive": true
         }
       }
}

我想比较这两个对象并获得一个仅包含更改数据的提交对象,如下所示。 公司名称尚未更改,我不想提交公司名称

{
       "name": "Example name",
       "company": { 
         "size": "FIVE",
         "licenseInfo": {
            "isActive": "0"
         }
       }
}

我可以手动逐个控制字段,但我想创建一个动态比较功能,以便在其他表单上使用它。

【问题讨论】:

  • 请注意,没有一个示例是有效的 JSON
  • 我没有责备。这些示例仍然不是有效的 JSON。属性名称也必须加引号
  • 这是一个查看 JSON 数据的好站点,但它不验证它。请改用jsonlint.com - 很抱歉我很迂腐,但很高兴知道 JSON 和 JS 对象/数组之间的区别
  • 我现在明白了。我修正了我的例子。谢谢你给我指路。
  • @evolutionxbox 没问题,您正在尝试提供帮助。你应该感觉很好,因为我学到了一些东西。

标签: javascript arrays json javascript-objects


【解决方案1】:

按键迭代(比较)并添加输入值...

const input = { "name": "Example name", "company": { "name": "new company", "size": "FIVE", "licenseInfo": { "isActive": "0" } } }
const compare = { "name": true, "company": { "size": true, "licenseInfo": { "isActive": true } } }

function filter(input, compare) {
    const output = {};
    for (const key in compare)
        output[key] = typeof compare[key] == "object"
            ? filter(input[key], compare[key])
            : input[key];

    return output;
}
console.log(filter(input, compare));

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2016-03-22
    • 2012-03-22
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多