首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用给定的键数组获取对象字段

使用给定的键数组获取对象字段
EN

Stack Overflow用户
提问于 2021-09-28 23:05:08
回答 3查看 69关注 0票数 0

鉴于这一目标:

代码语言:javascript
复制
const userData = {
  avatar: undefined,
  name: "Raul",
  username: "raulito",
  celebrity: true
}

我需要实现一个方法,该方法接收一个键列表(即"avatar“、"name”、"username")并获取userData对象的相应值,而忽略了未定义的值。

我如何使用现代的javascript语法来做到这一点?

代码语言:javascript
复制
function denormalizeUserData(userData, ...fields) {
  const denormalized = {};

  // For each key (field), get its value from userData, ignoring if undefined
  
  return denormalized;
}

所以,如果我做了:

代码语言:javascript
复制
 denormalizeUserData(userData, "avatar", "name");

方法必须返回我:

代码语言:javascript
复制
{
  name: "Raul,
}

忽略化身,因为它是没有定义的。

这是我的尝试。我需要现代语法。

代码语言:javascript
复制
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"))

EN

回答 3

Stack Overflow用户

发布于 2021-09-28 23:11:03

代码语言:javascript
复制
function denormalizeUserData(userData, ...fields) {
  const denormalized = {};

  for (const field of fields) {
    if (userData[field] !== undefined) denormalized[field] = userData[field];
  }
  
  return denormalized;
}

编辑:如果有人说,只有代码的答案是废话之类的

这很简单,足以成为一个简单的代码块。

票数 1
EN

Stack Overflow用户

发布于 2021-09-28 23:22:28

您可以使用Object.entries获取对象属性/值对,然后使用Array.filter筛选出其属性名不包括在fields中且其值为undefined的对,然后使用Object.fromEntries将其转换回对象。

代码语言:javascript
复制
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"))

票数 0
EN

Stack Overflow用户

发布于 2021-09-28 23:24:18

如果有值,则获取Object.entries并构建一个新对象,如果args数组includes键。

代码语言:javascript
复制
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'));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69369316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档