首页 > 解决方案 > 将点符号键字符串合并到对象

问题描述

我难住了。我有一个看起来像这样的对象:

{
    "sys": {
        "subject": "",
        "preview_text": "",
        "show_view_in_browser": true,
        "email_webview_url": "",
        "rep_alert": true,
        "signatures": {
            "show_joshua": true,
            "show_warren": true,
            "show_david": true
        },
        "email_address": "",
        "show_unsub_link": true,
        "unsubscribe_link": ""
    },
    "pre_intro": {
        "content__rtf": ""
    },
    "pre_intro.button__group": [
        {
            "url": "",
            "name": "",
            "img": ""
        }
    ],
    "content": {
        "introduction__rtf": "",
        "investor-returns": {
            "intro__rtf": "",
            "img__href": "",
            "end__rtf": ""
        },
        "end__rtf": ""
    },
    "content.investor-returns.button__group": [
        {
            "url": "",
            "name": "",
            "img": ""
        }
    ],
    "content.button__group": [
        {
            "url": "",
            "name": "",
            "img": ""
        }
    ]
}

你可以看到我有pre_intropre_intro.button__group以及其他一些点符号的键。我如何分解这些,以便将它们合并到这个对象中,这样输出将是:

"pre_intro": {
  "content__rtf": "",
  "button__group": [
    {  
      "url": "",
      "name": "",
      "img": ""
    }
  ]
},

我尝试使用 lodash_.pickBy()获取包含 的所有键'.',然后尝试将它们缩减为一个对象,但无法使其正常工作。

_.pickBy(snippets, function(v, k) {
    return _.includes(k, ".");
});

const ref = (obj, str) => {
    return str.split(".").reduce(function(o, x) { return o[x] }, obj);
}

有什么帮助吗?我无法控制给我的原始对象。

标签: javascriptobjectreduce

解决方案


flat从 npm使用,然后执行以下操作:

import { flatten, unflatten } from 'flat';

const v = { ...yourobject }

const merged = unflatten(flatten(v));


推荐阅读