javascript - Javascript Json对象到带有虚线键的对象
问题描述
我需要解析 Json 响应
{
"product": "office",
"info":
{
"brand":
[
"1brand"
],
"detail":
{
"number":
{
"min": 1,
"max": 5
},
}
}
};
用虚线键反对
{
"product" : "office",
"info.brand" : ["1brand"],
"info.detail.number.min" : 1,
"info.detail.number.max" : 5
}
嵌套和相邻对象的数量未知。解决方案应该是一个参数的函数 - 响应对象并返回新对象(带虚线字符串键)。
解决方案
您可以对每个级别的嵌套对象采用递归方法并收集键并将它们用于新对象中最后找到的值。
function flatKeys(object) {
function iter(part, keys) {
Object.keys(part).forEach(function (k) {
var allKeys = keys.concat(k);
if (part[k] && !Array.isArray(part[k]) && typeof part[k] === 'object') {
return iter(part[k], allKeys);
}
flat[allKeys.join('.')] = part[k];
});
}
var flat = {};
iter(object, []);
return flat;
}
var object = { product: "office", info: { brand: ["1brand"], detail: { number: { min: 1, max: 5 } } } };
console.log(flatKeys(object));
推荐阅读
- javascript - 多个 Javascript 文件不起作用
- c++ - 模板函数重载。理解字符
- xml - 使用 XSL 获取第二次出现的值
- authentication - User.Identity.IsAuthenticated 为假,尽管 SignInManager.PasswordSignInAsync() 成功
- java - 如何在蓝牙耳机和手机之间切换麦克风?
- c++ - 链接来自另一个文件的函数时,Qt 上出现错误 LNK 2019
- python - Python Nvidia 在使用 cuml 训练机器学习模型时出现内存错误
- c# - 为什么 Microsoft EmailAddressAttribute 使用的 Regex 接受超过 254 个字符的值?
- reactjs - 构建应用程序时:GET http://localhost ......json 404 (Not Found)
- ansible - 如何将比较运算符与字典值一起使用?