【问题标题】:Merge objects that are inside an Array inside one unique object将 Array 中的对象合并到一个唯一对象中
【发布时间】:2019-12-20 12:17:12
【问题描述】:

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

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)

有人可以帮忙吗?

【问题讨论】:

  • 您将无法创建像finalObj 这样的对象,因为“子对象”没有密钥。每个子对象都需要分配一个键(即“Show1”、“Show2”等)
  • 对象中的每个属性都必须有名字,你想要的对象格式无效
  • 您的const finalObj = {...} 不是合适的JS 代码。你不能这样做{ {key: value } }
  • finalObj 是不可能完成的。对象条目必须有键。看起来你用对象花括号替换了数组括号......

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


【解决方案1】:

正如已经指出的那样,您要求的结果不是有效的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2018-02-09
    • 2021-12-18
    • 2017-08-05
    • 2022-11-22
    相关资源
    最近更新 更多