Javascript 基于属性组合对象数组和内部数组

Javascript 基于属性组合对象数组和内部数组,javascript,arrays,object,Javascript,Arrays,Object,假设我有一个如下所示的数据结构: data = [ {title: "Alpha", content: [{ // 1 item }]}, {title: "Beta", content: [{ // 10 items }]}, {title: "Beta", content: [{ // 12 items }]}, {title: "Beta", content: [{ // 8 items }]} ] 我想

假设我有一个如下所示的数据结构:

data = [
        {title: "Alpha", content: [{ // 1 item }]},
        {title: "Beta", content: [{ // 10 items }]},
        {title: "Beta", content: [{ // 12 items }]}, 
        {title: "Beta", content: [{ // 8 items }]} 
       ]

我想找出一个reduce函数,它将返回以下结构:

data = [
        {title: "Alpha", content: [{ // 1 item }]},
        {title: "Beta", content: [{ // 30 items }]}
       ]
我试着寻找一些答案,其中reduce是基于标题使用的,但它没有返回新的结构和累积的内容数组,例如:

data = data.reduce((x, e) => {
          x.push(
            Object.assign(
              {},
              e,
              messages.find((x) => x.title == e.title)
            )
          )
          return x
        }, [])
任何帮助都会很好。

这可能会有帮助-

风险值数据=[{ 标题:阿尔法, 内容:[1,2,3,4,5] }, { 标题:Beta, 内容:[6,7,8,9,10] }, { 标题:Beta, 内容:[11,12,13,14,15] }, { 标题:Beta, 内容:[16,17,18,19,20] } ] data=data.reducearray,item=>{ const existingItem=array.findinerItem=>innerItem.title===item.title; 如果!!现有项目{ existingItem.content=[…existingItem.content,…item.content]; }否则{ array.pushitem; } 返回数组; }, []; 控制台日志数据 这可能会有帮助-

风险值数据=[{ 标题:阿尔法, 内容:[1,2,3,4,5] }, { 标题:Beta, 内容:[6,7,8,9,10] }, { 标题:Beta, 内容:[11,12,13,14,15] }, { 标题:Beta, 内容:[16,17,18,19,20] } ] data=data.reducearray,item=>{ const existingItem=array.findinerItem=>innerItem.title===item.title; 如果!!现有项目{ existingItem.content=[…existingItem.content,…item.content]; }否则{ array.pushitem; } 返回数组; }, []; 控制台日志数据 您不需要使用.find,它必须在每次迭代中搜索整个数组

使用和对象贴图收集重复项,将对象展开到阵列。作为推送参数馈送

数据=[ {标题:Alpha,内容:[{1:1}]}, {标题:Beta,内容:[{2:2}]}, {标题:Beta,内容:[{3:3}]}, {标题:Beta,内容:[{4:4}]} ] console.log Object.valuesdata.ReduceAc,{title,content}=>{ acc[标题]? acc[标题].内容.推送…内容: acc[title]={title,content} 返回acc },{} 您不需要使用.find,它必须在每次迭代中搜索整个数组

使用和对象贴图收集重复项,将对象展开到阵列。作为推送参数馈送

数据=[ {标题:Alpha,内容:[{1:1}]}, {标题:Beta,内容:[{2:2}]}, {标题:Beta,内容:[{3:3}]}, {标题:Beta,内容:[{4:4}]} ] console.log Object.valuesdata.ReduceAc,{title,content}=>{ acc[标题]? acc[标题].内容.推送…内容: acc[title]={title,content} 返回acc },{}
我对@user120242代码做了一些小改动

数据=[ {标题:Alpha,内容:[{1:1}]}, {标题:Beta,内容:[{2:2}]}, {标题:Beta,内容:[{3:3}]}, {标题:Beta,内容:[{4:4}]} ] 设acc={}; data.forEachx=>{ acc[x.title]=acc[x.title]|{title:x.title,内容:[]} acc[x.title].content=acc[x.title].content.concatx.content }
console.logacc我对@user120242代码做了一些小改动

数据=[ {标题:Alpha,内容:[{1:1}]}, {标题:Beta,内容:[{2:2}]}, {标题:Beta,内容:[{3:3}]}, {标题:Beta,内容:[{4:4}]} ] 设acc={}; data.forEachx=>{ acc[x.title]=acc[x.title]|{title:x.title,内容:[]} acc[x.title].content=acc[x.title].content.concatx.content }
console.LogAcc虽然此答案给出了正确答案,但我们需要记住,IE中目前不支持Object.values:链接文章已经有一个polyfill:了,这非常简单。虽然此答案给出了正确答案,我们需要记住,IE中目前不支持Object.values:链接文章已经有一个polyfill:了,这非常简单。这看起来非常接近我想要的。尝试时,我得到一个无法读取未定义错误的内容。为了澄清数据结构内容将是一个对象数组而不是数字,我知道我没有说清楚。。。这会改变你的答案吗?理想情况下,任何东西的数组都应该在这里工作,你能检查一下这个答案和你的代码之间是否有任何差异吗?这看起来非常接近我想要的。尝试时,我得到一个无法读取未定义错误的内容。为了澄清数据结构内容将是一个对象数组而不是数字,我知道我没有说清楚。。。这会改变你的答案吗?理想情况下,任何东西的数组都应该在这里工作,你能检查一下这个答案和你的代码之间是否有任何差异吗?