Получить уникальные объекты из массива объектов, когда ключи являются динамическими - PullRequest
0 голосов
/ 23 октября 2019

Вот массив объектов с динамическими ключами:

[ { 'CF Bangalore': 1 },
  { 'CF Bangalore': 2 },
  { 'CF Dhanbad': 3 },
  { 'CF Bangalore': 0 },
  { 'CF Kundli': 4 },
  { 'CF Pollachi': 1 },
  { 'CF Delhi': 2 },
  { 'CF Bangalore': 0 },
  { 'CF Bangalore': 6 },
  { 'CF Bangalore': 3 },
  { 'CF Pollachi': 2 },
  { 'CF Kundli': 9 },
]

Я хочу получить уникальные объекты. Я пытался использовать Set и Map. Но здесь ключи уникальны. Желаемый вывод: [{'CF Bangalore':12},{'CF Kundli':13},{'CF Pollachi':3}, {'CF Dhanbad':3},{'CF Delhi':2}]

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Вам нужно использовать Object.keys для получения ключей, при условии, что у каждого объекта есть только 1 элемент ключа, к которому вы можете получить доступ к 0-му значению индекса

let arr = [ { 'CF Bangalore': '' },{ 'CF Bangalore': '' },{ 'CF Dhanbad': '' },{ 'CF Bangalore': '' },{ 'CF Kundli': '' },{ 'CF Pollachi': '' },{ 'CF Delhi': '' },{ 'CF Bangalore': '' },{ 'CF Bangalore': '' },{ 'CF Bangalore': '' },{ 'CF Pollachi': '' },{ 'CF Kundli': '' },]

let uniq = [...new Set(arr.map(x => Object.keys(x)[0]))]

console.log(uniq)

Можно ли получить совокупное значение ключей?

let arr = [{ 'CF Bangalore': 1 },{ 'CF Bangalore': 2 },{ 'CF Dhanbad': 3 },{ 'CF Bangalore': 0 },{ 'CF Kundli': 4 },{ 'CF Pollachi': 1 },{ 'CF Delhi': 2 },{ 'CF Bangalore': 0 },{ 'CF Bangalore': 6 },{ 'CF Bangalore': 3 },{ 'CF Pollachi': 2 },{ 'CF Kundli': 9 },]

let uniq = arr.reduce((op, inp) => {
  let [key, value] = Object.entries(inp)[0]
  if (op.has(key)) {
    op.get(key)[key] += value
  } else {
    op.set(key, inp)
  }
  return op
}, new Map())

console.log([...uniq.values()])
0 голосов
/ 23 октября 2019

Объедините объекты, расширив массив до Object.assign() - это сделает все свойства уникальными. Затем получите записи и сопоставьте их с массивом объектов.

const arr = [{"CF Bangalore":""},{"CF Bangalore":""},{"CF Dhanbad":""},{"CF Bangalore":""},{"CF Kundli":""},{"CF Pollachi":""},{"CF Delhi":""},{"CF Bangalore":""},{"CF Bangalore":""},{"CF Bangalore":""},{"CF Pollachi":""},{"CF Kundli":""}]

const result = Object.entries(Object.assign({}, ...arr)) // merge the objects an get an array of [key, value] pairs
  .map(([key, value]) => ({ [key]: value })) // map back to an array of objects
  
console.log(result)
...