javascript - 将点符号键字符串合并到对象
问题描述
我难住了。我有一个看起来像这样的对象:
{
"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_intro
和pre_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);
}
有什么帮助吗?我无法控制给我的原始对象。
解决方案
flat
从 npm使用,然后执行以下操作:
import { flatten, unflatten } from 'flat';
const v = { ...yourobject }
const merged = unflatten(flatten(v));
推荐阅读
- mysql - SELECT 在同一列和 UNIQUE 值上具有多个 WHERE 条件
- javascript - 如何在 javascript 锚点中插入 ACF get_field?
- python - 如何从可能的字符串列表中替换python中的字符串
- web - 结帐后,继续按钮在注册过程中的 prestashop 中不起作用
- sequelize.js - sequelize.showAllTables 不是函数
- macos - 我可以在 macOS 上使用终端命令“mv”移动多个文件吗?
- python - 如何将文本保留在 pygame 窗口上一段确定的时间
- reactjs - 在 MERN 堆栈中工作时初始化 Reducer 时出错
- c# - 有经验的 DBA 应该使用哪种 C# 操作 ms-access 的方法?
- ionic-framework - 我想更改 ionic 中的复选框图标