【问题标题】:How can I get Keys of Object of an Key in Node JS [duplicate]如何在Node JS中获取键的对象的键[重复]
【发布时间】:2020-05-04 19:11:39
【问题描述】:

我正在尝试创建一些脚本,该脚本将接受一个对象,然后返回该对象中所有键的列表,该列表适用于两级键。但是一旦键有另一个对象或者键是一个包含对象的数组,脚本就不再返回键。有没有一种简单的方法可以做到这一点,还是我必须手动遍历所有键并检查是否有另一个对象?下面是一个示例对象。就我而言,我不关心值,但我需要所有键:

object1 = {
            DocId: "email_campaign::3ed76589-4063-49f6-a21e-9ca16981d102",
            _id: "3ed76589-4063-49f6-a21e-9ca16981d102",
            _type :"email_campaign",
            end_date: "",
            history: {
                created_by: "",
                created_on: "",
                update_on: "",
                updated_by: ""
            },
            librarys :[{id: 1, name : 'Lib 1'},{ id: 2, name: 'Lib 2'}],
            metrics : {
                first_email_sent: "",
                last_email_send: "",
                nbr_of_attachments_opened: 0,
                nbr_of_bounces: 0,
                nbr_of_email_opened: 0,
                nbr_of_emails: 0,
                nbr_of_unique_attachments_opened:0,
                nbr_of_unique_email_opened: 0
            },
            start_date: "",
            status: "Active",
            subject: "Test 1 Subject",
            summary: "",
            tags: ['one', 'two'],
            template_id: ""
        };

【问题讨论】:

  • 你能澄清一下吗? “适用于调平键”
  • 你可能想发布你目前获取密钥的代码,但我猜你会想把它变成一个递归函数,当它发现另一个层次时,它可以调用自己。
  • 所以如果我使用 lodash / underscore 和这个简单的代码让 myKeys = _.allKeys(obj) 我得到例如指标而不是指标下的键
  • 在您的示例中,我看不到“密钥有另一个对象或密钥是一个包含对象的数组”。我看到 value 是一个对象的地方,而 value 是一个对象数组的地方,但这是不同的。
  • 也许我互换了术语,但例如指标是对象中的一个键,并且有一堆嵌套键,或者库键具有另一个对象的数组,该对象有 2 个键

标签: javascript node.js


【解决方案1】:

以下代码可能对您有所帮助。这为您提供了一个键值数组。您可以根据自己的用例对其进行调整。

const object1 = {
  DocId: "email_campaign::3ed76589-4063-49f6-a21e-9ca16981d102",
  _id: "3ed76589-4063-49f6-a21e-9ca16981d102",
  _type :"email_campaign",
  end_date: "",
  history: {
      created_by: "",
      created_on: "",
      update_on: "",
      updated_by: ""
  },
  librarys : [{id: 1, name : 'Lib 1', id: 2, name: 'Lib 2'}],
  metrics : {
      first_email_sent: "",
      last_email_send: "",
      nbr_of_attachments_opened: 0,
      nbr_of_bounces: 0,
      nbr_of_email_opened: 0,
      nbr_of_emails: 0,
      nbr_of_unique_attachments_opened:0,
      nbr_of_unique_email_opened: 0
  },
  start_date: "",
  status: "Active",
  subject: "Test 1 Subject",
  summary: "",
  tags: ['one', 'two'],
  template_id: ""
};

function getKeyValues(obj, path = [], result = []) {
  let value;
  let fieldPath;
  Object.keys(obj).forEach(key => {
    value = obj[key];
    const modifiedKey = isNaN(key) ? key : `[${key}]`;
    fieldPath = path.concat([modifiedKey]);
    if (value instanceof Object) {
      getKeyValues(value, fieldPath, result);
    }
    result.push({"key": fieldPath.join("."), value});
  });
  return result;
}

console.log(getKeyValues(object1));

【讨论】:

    【解决方案2】:

    Object.keys()?

    const object1 = {
      DocId: "email_campaign::3ed76589-4063-49f6-a21e-9ca16981d102",
      _id: "3ed76589-4063-49f6-a21e-9ca16981d102",
      _type :"email_campaign",
      end_date: "",
      history: {
          created_by: "",
          created_on: "",
          update_on: "",
          updated_by: ""
      },
      librarys : [{id: 1, name : 'Lib 1', id: 2, name: 'Lib 2'}],
      metrics : {
          first_email_sent: "",
          last_email_send: "",
          nbr_of_attachments_opened: 0,
          nbr_of_bounces: 0,
          nbr_of_email_opened: 0,
          nbr_of_emails: 0,
          nbr_of_unique_attachments_opened:0,
          nbr_of_unique_email_opened: 0
      },
      start_date: "",
      status: "Active",
      subject: "Test 1 Subject",
      summary: "",
      tags: ['one', 'two'],
      template_id: ""
    };
    
    console.log(Object.keys(object1));

    【讨论】:

    • 它不会从嵌套对象中获取键
    • "但是一旦键有另一个对象或者键是一个包含对象的数组,脚本就不再返回键。"听起来你不想要嵌套对象
    • 我既需要网状对象,也需要数组中的对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多