javascript-如何根据键对对象列表进行分组并合并结果
我的输入阵列:javascript-如何根据键对对象列表进行分组并合并结果,javascript,Javascript,我的输入阵列: const inputAr = [ {name: "Day", Food: 1}, {name: "Day", Drink: 2}, {name: "Day", Sleep: 7}, {name: "Week", Food: 5}, {name: "Week", Drink: 5}, {name: "Week",
const inputAr = [
{name: "Day", Food: 1},
{name: "Day", Drink: 2},
{name: "Day", Sleep: 7},
{name: "Week", Food: 5},
{name: "Week", Drink: 5},
{name: "Week", Sleep: 12},
{name: "Month", Food: 10},
{name: "Month", Drink: 2},
{name: "Month", Sleep: 2},
]
期望输出
const desiredOut = [
{
name: "Day", Food: 1, Drink: 2, Sleep: 7
},
{
name: "Week", Food: 5, Drink: 5, Sleep: 12
},
{
name: "Month", Food: 10, Drink: 2, Sleep: 2
},
]
到目前为止,我已经成功地将我的输入数组分组,但我不确定如何实现所需的输出
到目前为止我的代码
const groupedResults = inputAr.reduce((result, currentValue) => {
(result[currentValue["name"]] = result[currentValue["name"]] || []).push(
currentValue
);
return result;
}, {});
下面显示的输出不是我想要实现的
// groupedReults
[
{
Day: [
{name: "Day", Food: 1},
{name: "Day", Drink: 2},
{name: "Day", Sleep: 7},
],
Week: [
{name: "Week", Food: 5},
{name: "Week", Drink: 5},
{name: "Week", Sleep: 12},
],
Month : [
{name: "Month", Food: 10},
{name: "Month", Drink: 2},
{name: "Month", Sleep: 2},
]
}
]
链接立即复制:您可以获取一个对象来收集组,并从该对象中提取名称,然后将其余的分配给组中的对象 常数 数据=[{姓名:日,食物:1},{姓名:日,饮料:2},{姓名:日,睡眠:7},{姓名:周,食物:5},{姓名:周,饮料:5},{姓名:周,睡眠:12},{姓名:月,食物:10},{姓名:月,饮料:2},{姓名:月,睡眠:2}], 结果=Object.valuesdata.reducer,{name,…o}=>{ Object.assignr[name]=r[name]|{name},o; 返回r; }, {}; console.logresult;
.as console wrapper{max height:100%!important;top:0;}您可以获取一个用于收集组的对象,并从该对象提取名称,然后将其余的分配给组中的对象 常数 数据=[{姓名:日,食物:1},{姓名:日,饮料:2},{姓名:日,睡眠:7},{姓名:周,食物:5},{姓名:周,饮料:5},{姓名:周,睡眠:12},{姓名:月,食物:10},{姓名:月,饮料:2},{姓名:月,睡眠:2}], 结果=Object.valuesdata.reducer,{name,…o}=>{ Object.assignr[name]=r[name]|{name},o; 返回r; }, {}; console.logresult;
.作为控制台包装{max height:100%!important;top:0;}您可以使用Array.reduce和Array.findIndex实现它 常量输入=[ {姓名:日,食物:1}, {姓名:天,饮料:2}, {name:Day,Sleep:7}, {姓名:周,食物:5}, {姓名:周,饮料:5}, {姓名:周,睡眠:12}, {姓名:月份,食物:10}, {姓名:月份,饮料:2}, {name:Month,Sleep:2}, ]; 常量输出=inputAr.reduceac,cur=>{ const{name:curName,…rest}=cur; const existedIndex=acc.findIndex{name}=>name==curName; 如果existedIndex>=0{ acc[existedIndex]={…acc[existedIndex],…rest}; }否则{ acc.pushcur; } 返回acc; }, [];
console.logoutput 您可以使用Array.reduce和Array.findIndex实现这一点 常量输入=[ {姓名:日,食物:1}, {姓名:天,饮料:2}, {name:Day,Sleep:7}, {姓名:周,食物:5}, {姓名:周,饮料:5}, {姓名:周,睡眠:12}, {姓名:月份,食物:10}, {姓名:月份,饮料:2}, {name:Month,Sleep:2}, ]; 常量输出=inputAr.reduceac,cur=>{ const{name:curName,…rest}=cur; const existedIndex=acc.findIndex{name}=>name==curName; 如果existedIndex>=0{ acc[existedIndex]={…acc[existedIndex],…rest}; }否则{ acc.pushcur; } 返回acc; }, [];
console.logoutput 下面是它的分解: 按项目名称对项目进行分组,并在每个组中应用键值对 将组映射到对象,将组作为名称,其余值作为键值对 常数数据=[ {姓名:天,食物:1},{姓名:天,饮料:2},{姓名:天,睡眠:7}, {姓名:周,食物:5},{姓名:周,饮料:5},{姓名:周,睡眠:12}, {姓名:月份,食物:10},{姓名:月份,饮料:2},{姓名:月份,睡眠:2} ]; const groups=data.reducegroup,{name,…rest}=> {…组,[名称]:{…组[名称]|{},…rest},{}; 控制台。日志组; const result=Object.entriesgroups.map[名称、值]=> {name,…values}; console.logresult;
.as控制台包装{top:0;最大高度:100%!important;}下面是它的分解: 按项目名称对项目进行分组,并在每个组中应用键值对 将组映射到对象,将组作为名称,其余值作为键值对 常数数据=[ {姓名:天,食物:1},{姓名:天,饮料:2},{姓名:天,睡眠:7}, {姓名:周,食物:5},{姓名:周,饮料:5},{姓名:周,睡眠:12}, {姓名:月份,食物:10},{姓名:月份,饮料:2},{姓名:月份,睡眠:2} ]; const groups=data.reducegroup,{name,…rest}=> {…组,[名称]:{…组[名称]|{},…rest},{}; 控制台。日志组; const result=Object.entriesgroups.map[名称、值]=> {name,…values}; console.logresult;
.作为控制台包装器{top:0;max height:100%!important;}感谢您的回答,但当我在我的react应用程序上运行此程序时,我收到一个错误,如:当前未启用对实验语法“LogicalSignment”的支持。奇怪就拿旧作业来说吧:r[name]=r[name]| |{name}。谢谢你的回答,但是当我在我的react应用程序上运行这个时,我得到了一个错误,比如:目前没有启用对实验语法“LogicalSignment”的支持。怪人只需接受旧的赋值:r[name]=r[name]| |{name}。