将一个数组中的对象合并到一个唯一对象中

时间:2019-08-13 22:55:45

标签: javascript arrays ecmascript-6 reduce google-datalayer

我在这里有一个问题。我有一个带有属性的数组:

let products = [
  { 
    nome_evento: 'Show1',
    preco: 100,
    quantidade: 1
  },
  { 
    nome_evento: 'Show2',
    preco: 200,
    quantidade: 3
  }, 
  { 
    nome_evento: 'Show3',
    preco: 300,
    quantidade: 5
  }
]

实际上是Google dataLayer的数组。我需要获取此数组内所有对象的所有属性,并将它们全部放入一个唯一的对象中,如下所示:

const finalObj = {
{ 
    nome_evento: 'Show1',
    preco: 100,
    quantidade: 1
  },
  { 
    nome_evento: 'Show2',
    preco: 200,
    quantidade: 3
  }, 
  { 
    nome_evento: 'Show3',
    preco: 300,
    quantidade: 5
  }
}

这是我试图做的,但是它一直在为我提供数组中的最后一个对象,而我全都需要它们:

let productData = []
  products.forEach(product => {
   let item = {}
   item['nome_evento'] = product.nome_evento
   item['preco'] = product.preco
   item['quantidade'] = product.quantidade
   productData.push(item)
  })

const finalObj = productData.reduce(function(acc, x) {
    for (var key in x) acc[key] = x[key];
    return acc;
}, {});

console.log(finalObj)

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

正如已经指出的那样,您要查询的结果不是有效的javascript,因此无法实现。也许您需要的是将每个nome_evento作为新对象的键?这样您就可以查找result['Show1'].preco === 100之类的东西。

const data = [  {     nome_evento: 'Show1',    preco: 100,    quantidade: 1  },  {     nome_evento: 'Show2',    preco: 200,    quantidade: 3  },   {     nome_evento: 'Show3',    preco: 300,    quantidade: 5  }]

const result = data
  .reduce((acc, { nome_evento, ...rest }) => ({
    ...acc,
    [nome_evento]: rest
  }), {})
  
 console.log(result)