javascript - 规范化 Javascript 对象
问题描述
我有一个 json 对象,其中包含对象,例如user: {"name": "tim"}
并且想要一种将其转入的方法"user.name": 'tim'
我试过:Javascript Recursion normalize JSON data
哪个没有返回我想要的结果,也尝试了一些包,没有运气
解决方案
您可以使用递归方法通过连接它们的键来展平嵌套对象,如下所示:
const flattenObject = (obj) => {
const flatObject = {};
Object.keys(obj).forEach((key) => {
const value = obj[key];
if (typeof value === 'object') {
const flatNestedObject = flattenObject(value);
Object.keys(flatNestedObject).forEach((nestedKey) => {
flatObject[`${key}.${nestedKey}`] = flatNestedObject[nestedKey];
});
} else {
flatObject[key] = value;
}
});
return flatObject;
};
const obj = {
user: { name: 'tim' },
};
console.log(flattenObject(obj));
此解决方案适用于任何数量的级别。
如果您的环境不支持Object.keys
,您可以for..in
改用:
const flattenObject = (obj) => {
const flatObject = {};
for (const key in obj) {
if (!obj.hasOwnProperty(key)) continue;
const value = obj[key];
if (typeof value === 'object') {
const flatNestedObject = flattenObject(value);
for (const nestedKey in flatNestedObject) {
if (!flatNestedObject.hasOwnProperty(nestedKey)) continue;
flatObject[`${key}.${nestedKey}`] = flatNestedObject[nestedKey];
}
} else {
flatObject[key] = value;
}
}
return flatObject;
};
const obj = {
user: { name: 'tim' },
};
console.log(flattenObject(obj));
推荐阅读
- html - 通过网络浏览器单击按钮打开移动相机
- crystal-reports - 如何使用水晶报表图形位置中的基本目录定位图像
- .net - 在 Blazor 和 MVC 中渲染视图
- java - 尝试使用 Spark 数据集 (Java) 查找在 2 个文件之间删除的记录时结果不一致
- jquery - JQuery .click 函数在 Rails 中不起作用(有许多可能不相关的错误)
- ssh-tunnel - 从 tableau desktop 和 tableau server 连接 Aurora Severless
- java - Tutology ( DNF ) 和Contradiction ( CNF ) 方法
- python-3.x - 如何安装底图,出现错误
- r - 将前面和后面的单词连接到匹配 R 中条件的单词
- c++ - 在 MacOS 上使用 CLion 编译 32 位 C++ 程序