Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript-如何根据键对对象列表进行分组并合并结果_Javascript - Fatal编程技术网

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}。