【问题标题】:find keys from dynamiclly generated array object从动态生成的数组对象中查找键
【发布时间】:2018-08-10 13:11:56
【问题描述】:

我有一个代码可以生成这样的数组对象

[{
    "invoiceNumber": "INV-056",
    "invoiceDate": "2018-06-19",
    "jobCardNumber": "JC-018",
    "tax": 43323,
  }, {
    "invoiceNumber": "INV-056",
    "invoiceDate": "2018-06-19",
    "jobCardNumber": "JC-018",
    "tax": 213,
    "part@18%": 140.04,
    "part@12%": 140.04,
    "part@9%": 140.04,
    "labour@18%": 140.04,
    "offer@12%": 140.04,
    "offer@9%": 140.04,
  }, {
    "invoiceNumber": "INV-056",
    "invoiceDate": "2018-06-19",
    "jobCardNumber": "JC-018",
    "tax": 213,
  },
  {
    "invoiceNumber": "INV-056",
    "invoiceDate": "2018-06-19",
    "jobCardNumber": "JC-018",
    "tax": 213,
    "part@9%": 140.04,
    "labour@18%": 140.04,
    "offer@12%": 140.04,
  }
]

part@、labour@ 和 offer@ 键是动态的。我想要数组对象中的所有键。 我想要的结果是

[ '发票编号', '发票日期', '工作卡号', '税', '部分@18%', '部分@12%', '部分@9%', '劳动力@18%', '报价@12%', '报价@9%' ]

【问题讨论】:

  • Object.keys(myObj)
  • @jmargolisvt 它会返回 ['0', '1', '2', '3'] 我想要['invoiceNumber','invoiceDate','jobCardNumber','tax','part@18%','part@12%','part@9%','labour@18%','offer@12%','offer@9%']
  • Object.keys() 将为您提供任何对象的密钥。使用 object.keys 映射数组,展平结果,然后过滤掉唯一值。只是简单的数组操作。一旦您知道Object.keys(),这应该是微不足道的。你只得到 [0,1,2,3] 因为你 Object.key'ed 数组而不是数组中的对象。
  • 你是说你想要一个所有出现的键的不同列表,不管它们出现在哪个对象中,或者它们出现了多少次?
  • @ADyson 是的。

标签: javascript arrays json


【解决方案1】:

您可以使用Array.prototype.reduce 循环遍历对象并将它们的键添加到Set

var data=[{invoiceNumber:"INV-056",invoiceDate:"2018-06-19",jobCardNumber:"JC-018",tax:43323},{invoiceNumber:"INV-056",invoiceDate:"2018-06-19",jobCardNumber:"JC-018",tax:213,"part@18%":140.04,"part@12%":140.04,"part@9%":140.04,"labour@18%":140.04,"offer@12%":140.04,"offer@9%":140.04},{invoiceNumber:"INV-056",invoiceDate:"2018-06-19",jobCardNumber:"JC-018",tax:213},{invoiceNumber:"INV-056",invoiceDate:"2018-06-19",jobCardNumber:"JC-018",tax:213,"part@9%":140.04,"labour@18%":140.04,"offer@12%":140.04}];

var result = [...data.reduce((all, el) => (Object.keys(el).forEach(k => all.add(k)),all), new Set)];

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2021-12-06
    • 2018-05-21
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多