我目前正在学习 JavaScript,并且遇到了 Object.assign()
方法,但我不太确定如何将其应用到项目中。
这是我的例子:
这是每个新的 profiles
数组应该解析的引用数组
const references = {
"photos": {
"paul": {
"version": {
"amsterdam": {
"image_url": "firstUrl",
},
"rotterdam": {
"image_url": "secondUrl",
}
}
},
"mary": {
"version": {
"berlin": {
"image_url": "thirdUrl",
}
}
},
"vincent": {
"version": {
"london": {
"image_url": "fourthUrl",
},
"paris": {
"image_url": "fifthUrl",
},
"prague": {
"image_url": "sixthUrl",
}
}
}
}
}
这是我的 API 请求吐出的内容
const profiles = {
"paul": "rotterdam",
"vincent": "prague"
}
我想要实现的是像这样为每个版本的照片放置相应的 image_url
newArray = {
"paul": "secondUrl",
"vincent": "sixthUrl"
}
但是有可能吗?或者这不是Object.assign()
的目的?
非常感谢!
答案 0 :(得分:2)
我将使用 Object.entries
和 Object.fromEntries
创建一个新对象:
const references = {"photos": {"paul": {"version": {"amsterdam": {"image_url": "firstUrl",},"rotterdam": {"image_url": "secondUrl",}}},"mary": {"version": {"berlin": {"image_url": "thirdUrl",}}},"vincent": {"version": {"london": {"image_url": "fourthUrl",},"paris": {"image_url": "fifthUrl",},"prague": {"image_url": "sixthUrl",}}}}}
const profiles = {
"paul": "rotterdam",
"vincent": "prague"
}
const result = Object.fromEntries(Object.entries(profiles).map(([k, v]) =>
[k, references.photos[k]?.version?.[v]?.image_url]
));
console.log(result);
或者,您可以使用 Object.assign
代替 Object.fromEntries
,并结合扩展语法:
const references = {"photos": {"paul": {"version": {"amsterdam": {"image_url": "firstUrl",},"rotterdam": {"image_url": "secondUrl",}}},"mary": {"version": {"berlin": {"image_url": "thirdUrl",}}},"vincent": {"version": {"london": {"image_url": "fourthUrl",},"paris": {"image_url": "fifthUrl",},"prague": {"image_url": "sixthUrl",}}}}}
const profiles = {
"paul": "rotterdam",
"vincent": "prague"
}
const result = Object.assign({}, ...Object.entries(profiles).map(([k, v]) =>
({[k]: references.photos[k]?.version?.[v]?.image_url})
));
console.log(result);
答案 1 :(得分:1)
首先,您使用的数据结构是 Object
,而不是 Array
。
其次,Object.assign
将值从源对象复制到目标对象,但不允许在此过程中对 结构 进行任何操作。听起来您想使用 Object.fromEntries
从现有对象中获取新对象。
const references = { /* full object abbreviated */ };
const profiles = {
"paul": "rotterdam",
"vincent": "prague"
};
const result = Object.fromEntries(
Object.entries(profiles).map(([user, version]) => {
const photos = references.photos[user];
const imageUrl = photos.version[version].image_url;
return [user, imageUrl];
})
);