Найти ключи из динамически сгенерированного объекта массива

У меня есть код, который генерирует такой объект массива

[{
    "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 @ являются динамическими. Мне нужны все ключи от объекта массива. результат, который я хочу, это

[ 'номер счета', 'Дата счета', 'jobCardNumber', 'налог', 'часть @ 18%', 'часть @ 12%', 'часть @ 9%', "труд @ 18%", 'предложение @ 12%', 'предложение @ 9%' ]

Object.keys (myObj)

jmargolisvt 10.08.2018 15:12

@jmargolisvt вернет ['0', '1', '2', '3'] я хочу ['invoiceNumber','invoiceDate','jobCardNumber','tax','part@1‌​8%','part@12%','part‌​@9%','labour@18%','o‌​ffer@12%','offer@9%'‌​]

rahul prajapati 10.08.2018 15:24
Object.keys() даст вам ключи от любого объекта. Сопоставьте массив с object.keys, сгладьте результат, а затем отфильтруйте уникальные объекты. Просто простые операции с массивами. Это должно быть тривиально, если вы знаете Object.keys(). У вас есть только [0,1,2,3], потому что вы использовали Object.key для массива, а не для объектов внутри массива.
Shilly 10.08.2018 15:40

Вы хотите сказать, что вам нужен отдельный список всех возникающих ключей, независимо от того, в каком объекте они встречаются или сколько раз они встречаются?

ADyson 10.08.2018 15:40

@ADyson, да, именно так.

rahul prajapati 13.08.2018 06:58
4
5
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);

Другие вопросы по теме