javascript - 展平对象数组中的嵌套对象
问题描述
我使用打字稿,我有这个对象结构:
{
a: "somedata",
b: "somedata2",
c: [
{
name: "item1",
property1: "foo",
property2: "bar",
property3:{property4:"baz",property5:"foo2"},
property6:"bar2"
},
{ name: "item2", properties:{...} },
]
};
我需要将每个项目的属性设置在同一级别,以便让我的最终对象像这样:
{
a: "somedata",
b: "somedata2",
c: [
{
name: "item1",
property1: "foo",
property2: "bar",
property4:"baz",
property5:"foo2",
property6:"bar2"
},
{ name: "item2",
property1:"...",
property2:"..." },
]
};
编辑: 这是我现在唯一的东西:
getFinalObject(objectId){
return this.http.get(
this.API_URL + "/object/"+objectId,
this.getHeaders()
).pipe(
map((res:any) =>{//my final object should be mapped here
});
}
解决方案
这是一个应该在所有深度都有效的通用函数(除非你用过深的对象破坏调用堆栈)。
const flatten = <T extends Record<string, any>>(value: T): Record<string, any> =>
Object.fromEntries(
Object.entries(value)
.flatMap(([k, v]) =>
typeof v === "object" && v !== null
? (Array.isArray(v)
? [[k, v.map(x => typeof x === "object" ? flatten(x) : x)]]
: Object.entries(flatten(v)))
: [[k, v]]))
推荐阅读
- docker - 带有 docker 的单个服务器上的多个站点
- trigonometry - 仅使用余弦检查 Delaunay “翻转条件”
- architecture - 当控制器输入错误时会发生什么?它是否应该将错误的输入传播到 UseCaseInteractor?
- java - 如何从回收视图中获取按钮单击时的文本视图?
- github - 对于使用 VS Code 的远程开发,当我执行 GIT 克隆时,存储库如何到达远程计算机?
- ruby-on-rails - RSpec 控制器测试 - ActionController::UnfilteredParameters:无法将未经许可的参数转换为哈希
- sql - 如何编写条件以执行 for 循环不返回任何行的操作
- reactjs - redux-persist 中没有更新新的 store 结构
- javascript - Array.push 不是函数,在从 localstorage 检索的数组上
- css - 如何在不按 CTRL + F5 的情况下使 Elementor 更改可见?