gpt4 book ai didi

javascript - 创建 JSON 对象的最优雅方式

转载 作者:行者123 更新时间:2023-12-01 15:50:36 31 4
gpt4 key购买 nike

我有一个看起来像这样的 javacript 对象。

val = 
{
default: "version1"
version1: "abc.com"
version2: "def.com"
...
versionn:"xyz.com"
}

我想将其转换为这样的嵌套 json
"newval": {
"website": {
"url": "abc.com"
},
"versions": {
"version1": {
"website": {
"url": "abc.com"
}
},
"version2": {
"website": {
"url": "def.com"
}
}
}

}

我的版本使用了很多 if 语句和不必要的变量。有没有一种优雅的方式来转换/创建这个 JSON。

即默认版本是 newval.website 下的版本,所有版本数据都是 newval.website.versions 的值

最佳答案

设置 .website属性很简单。只需查找 default 的 key 即可持有。

另一部分可以通过过滤掉 default 来完成。键,然后使用 Object.assign 将剩余的映射到分配给结果的新对象列表。 .

var val =  {
default: "version1",
version1: "abc.com",
version2: "def.com",
version3:"xyz.com"
};

var res = {
website: {url: val[val.default]},
versions: Object.assign(
...Object.keys(val)
.filter(k => k !== "default")
.map(k => ({[k]: {website: {url: val[k]} } }))
)};

console.log(res);



这是避免需要 .filter() 的另一种方法.假设您不介意制作 default在原始对象上不可枚举。

var val =  {
default: "version1",
version1: "abc.com",
version2: "def.com",
version3:"xyz.com"
};

var res = {
website: {url: val[Object.defineProperty(val, "default", {enumerable:false}).default]},
versions: Object.assign(
...Object.keys(val).map(k => ({[k]: {website: {url: val[k]} } }))
)};

console.log(res);


该属性仍然是可配置的,因此您可以根据需要重置它。

或使用 .entries()而不是 .keys().map() 中使用参数解构打回来。

var val =  {
default: "version1",
version1: "abc.com",
version2: "def.com",
version3:"xyz.com"
};

var res = {
website: {url: val[Object.defineProperty(val, "default", {enumerable:false}).default]},
versions: Object.assign(
...Object.entries(val).map(([k, v]) => ({[k]: {website: {url: v} } }))
)};

console.log(res);

关于javascript - 创建 JSON 对象的最优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46394507/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com