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:了,这非常简单。这看起来非常接近我想要的。尝试时,我得到一个无法读取未定义错误的内容。为了澄清数据结构内容将是一个对象数组而不是数字,我知道我没有说清楚。。。这会改变你的答案吗?理想情况下,任何东西的数组都应该在这里工作,你能检查一下这个答案和你的代码之间是否有任何差异吗?这看起来非常接近我想要的。尝试时,我得到一个无法读取未定义错误的内容。为了澄清数据结构内容将是一个对象数组而不是数字,我知道我没有说清楚。。。这会改变你的答案吗?理想情况下,任何东西的数组都应该在这里工作,你能检查一下这个答案和你的代码之间是否有任何差异吗?