鉴于这一目标:
const userData = {
avatar: undefined,
name: "Raul",
username: "raulito",
celebrity: true
}我需要实现一个方法,该方法接收一个键列表(即"avatar“、"name”、"username")并获取userData对象的相应值,而忽略了未定义的值。
我如何使用现代的javascript语法来做到这一点?
function denormalizeUserData(userData, ...fields) {
const denormalized = {};
// For each key (field), get its value from userData, ignoring if undefined
return denormalized;
}所以,如果我做了:
denormalizeUserData(userData, "avatar", "name");方法必须返回我:
{
name: "Raul,
}忽略化身,因为它是没有定义的。
这是我的尝试。我需要现代语法。
const userData = {
avatar: undefined,
name: "Raul",
username: "raulito",
celebrity: true
}
function denormalizeUserData(userData, ...fields) {
const denormalized = {};
fields.forEach((key) => {
const value = userData[key];
if(typeof value !== "undefined") {
denormalized[key] = value;
}
})
return denormalized;
}
console.log(denormalizeUserData(userData, "celebrity", "name", "avatar"))
发布于 2021-09-28 23:11:03
function denormalizeUserData(userData, ...fields) {
const denormalized = {};
for (const field of fields) {
if (userData[field] !== undefined) denormalized[field] = userData[field];
}
return denormalized;
}编辑:如果有人说,只有代码的答案是废话之类的
这很简单,足以成为一个简单的代码块。
发布于 2021-09-28 23:22:28
您可以使用Object.entries获取对象属性/值对,然后使用Array.filter筛选出其属性名不包括在fields中且其值为undefined的对,然后使用Object.fromEntries将其转换回对象。
const userData = {
avatar: undefined,
name: "Raul",
username: "raulito",
celebrity: true
}
function denormalizeUserData(userData, ...fields) {
return Object.fromEntries(Object.entries(userData).filter(e => fields.includes(e[0]) && e[1] != undefined))
}
console.log(denormalizeUserData(userData, "avatar", "name"))
发布于 2021-09-28 23:24:18
如果有值,则获取Object.entries并构建一个新对象,如果args数组includes键。
const userData = {
avatar: undefined,
name: "Raul",
username: "raulito",
celebrity: true
};
function denormalizeUserData(obj, ...args) {
const out = {};
for (let [key, value] of Object.entries(obj)) {
if (value && args.includes(key)) {
out[key] = value;
};
}
return out;
}
console.log(denormalizeUserData(userData));
console.log(denormalizeUserData(userData, 'avatar', 'name'));
console.log(denormalizeUserData(userData, 'avatar', 'name', 'celebrity'));
https://stackoverflow.com/questions/69369316
复制相似问题