在 JavaScript 中将一个键值分配给另一个键值

时间:2021-06-16 21:43:41

标签: javascript

我目前正在学习 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()的目的?

非常感谢!

2 个答案:

答案 0 :(得分:2)

我将使用 Object.entriesObject.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];
    })
);
相关问题