У меня есть код, который генерирует такой объект массива
[{
"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%' ]
@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 для массива, а не для объектов внутри массива.
Вы хотите сказать, что вам нужен отдельный список всех возникающих ключей, независимо от того, в каком объекте они встречаются или сколько раз они встречаются?
@ADyson, да, именно так.
Вы можете прокручивать объекты с помощью 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.info(result);
Object.keys (myObj)