javascript - 如何通过前缀或键将 JSON 键分组为新键?
问题描述
所以我有一个有点像这样的查询输出(使用 knex):
response = [
{id: 1, source: 'mobile', ms_payment.id: 111, ms_payment.total: 100},
{id: 2, source: 'mobile', ms_payment.id: 112, ms_payment.total: 210},
...
]
在 REST API 中返回的预期输出(映射输出)是:
result = [
{id: 1, source: 'mobile', ms_payment: { id: 111, total: 100 }},
{id: 2, source: 'mobile', ms_payment: { id: 112, total: 210 }},
]
有没有使用javascript的有效算法?我目前正在使用 Array.map() 手动执行此操作,它只返回预期的输出模式,没有任何循环或方法。
先感谢您。
解决方案
您需要迭代条目并获取嵌套对象。
const
setValue = (object, key, value) => {
const
keys = key.split('.'),
last = keys.pop();
keys.reduce((o, k) => o[k] ??= {}, object)[last] = value;
return object;
},
response = [{ id: 1, source: 'mobile', 'ms_payment.id': 111, 'ms_payment.total': 100 }, { id: 2, source: 'mobile', 'ms_payment.id': 112, 'ms_payment.total': 210 }],
result = response.map(o => Object
.entries(o)
.reduce((r, [k, v]) => setValue(r, k, v), {})
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- reactjs - 反应国际返回[对象对象]
- ios - Swift UICollectionView dequeuereusablecell 复制前一个单元格
- javascript - 如何在点击汉堡时显示导航
- python - 如何将 int 与列表相加?类型错误:+ 不支持的操作数类型:“int”和“list”
- ios - 如何将图像数组转换为字符串
- javascript - Node.js 服务器-客户端通信
- excel - 根据类别和间隔填充列
- sql-server - 如何从包含 XML 数据的列中提取值
- java - 自动回复短信不起作用。安卓工作室
- java - Java mongo-spark-connector - 如何将无序批量写入写入 MongoDB?