Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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_Ecmascript 6 - Fatal编程技术网

如何在Javascript中分组并在不存在空对象时添加空对象

如何在Javascript中分组并在不存在空对象时添加空对象,javascript,ecmascript-6,Javascript,Ecmascript 6,我想要一个最终的对象,其中键按ID分组。每个键内都有一个大小相同的对象数组。棘手的部分是在原始数组中不存在任何对象的情况下添加一个空对象。示例数据 const exampleData = [ {id: 1, name: "Tony", subjectId: 1, subjectScore: 25 }, {id: 2, name: "Lori" subjectId: 1, subjectScore: 25 }, {id: 2, name: "Lor

我想要一个最终的对象,其中键按ID分组。每个键内都有一个大小相同的对象数组。棘手的部分是在原始数组中不存在任何对象的情况下添加一个空对象。示例数据

const exampleData = [
{id: 1,
name: "Tony",
subjectId: 1,
subjectScore: 25
},
{id: 2,
name: "Lori"
subjectId: 1,
subjectScore: 25
},
{id: 2,
name: "Lori",
subjectId: 2,
subjectScore: 35
},
{id: 2,
name: "Lori",
subjectId: 3,
subjectScore: 45
},
];
这就是我试过的

const reducedArray = filteredArray.reduce((result, item) => ({
    ...result,
    [item.assessmentId]: [...(result[item.assessmentId] || []), item]
  }), {});
我想要的结果是:

const finalArray = {
1: [id: 1, Name: Tony, subjectId: 1, subjectName: Math,  score: 25], [id: 1, subjectId: 2, subjectName: Physics, score: 0], [id: 1, subjectId: 3, subjectName: Chemistry, score: 0],
2: [id: 1, Name: Lory, subjectId: 1, subjectName: Math, score: 25], [id: 1,Name: Lory, subjectId: 2, subjectName: Physics, score: 35], [id: 1, Name: Lory, subjectId: 3, subjectName: Chemistry, score: 45]
}

您可以采用两次通过的方法,在第一次运行中收集所有
sibjectId
,获得唯一值,并在第二次运行中创建结果

const
数据=[{id:1,姓名:“托尼”,被试:1,被试分数:25},{id:2,姓名:“洛瑞”,被试:1,被试分数:35},{id:2,姓名:“洛瑞”,被试:2,被试分数:25},{id:2,姓名:“洛瑞”,被试:3,被试分数:25}],
subjectId=Array.from(新集合(data.map(({subjectId})=>subjectId)),
结果=数据。减少((r,o)=>{
如果(!r[o.id])r[o.id]=subjectId.map(subjectId=>({…o,subjectId,subjectScore:0}))
r[o.id][subjectIds.indexOf(o.subjectId)]=o;
返回r;
}, {});
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以采用两次传递的方法,在第一次运行时收集所有
sibjectId
,获取唯一值,并在第二次运行时创建结果

const
数据=[{id:1,姓名:“托尼”,被试:1,被试分数:25},{id:2,姓名:“洛瑞”,被试:1,被试分数:35},{id:2,姓名:“洛瑞”,被试:2,被试分数:25},{id:2,姓名:“洛瑞”,被试:3,被试分数:25}],
subjectId=Array.from(新集合(data.map(({subjectId})=>subjectId)),
结果=数据。减少((r,o)=>{
如果(!r[o.id])r[o.id]=subjectId.map(subjectId=>({…o,subjectId,subjectScore:0}))
r[o.id][subjectIds.indexOf(o.subjectId)]=o;
返回r;
}, {});
控制台日志(结果)
.as控制台包装{max height:100%!important;top:0;}
代码片段(示例和预期结果)没有完全对齐。但是通过对变量和字段进行一些调整,我可以让您的代码正常工作。见下文:

const exampleData=[
{
id:1,
姓名:“托尼”,
主体:一,,
科目分数:25分
},
{
id:2,
姓名:“Lori”,
主体:一,,
科目分数:25分
},
{
id:2,
姓名:“Lori”,
主体二,,
科目得分:35分
},
{
id:2,
姓名:“Lori”,
主体三,,
科目分数:45
},
];
const reducedArray=exampleData.reduce((结果,项目)=>({
…结果,
[item.id]:[…(结果[item.id]| |[]),item]
}), {});
控制台日志(简化阵列)代码片段(示例和预期结果)没有完全对齐。但是通过对变量和字段进行一些调整,我可以让您的代码正常工作。见下文:

const exampleData=[
{
id:1,
姓名:“托尼”,
主体:一,,
科目分数:25分
},
{
id:2,
姓名:“Lori”,
主体:一,,
科目分数:25分
},
{
id:2,
姓名:“Lori”,
主体二,,
科目得分:35分
},
{
id:2,
姓名:“Lori”,
主体三,,
科目分数:45
},
];
const reducedArray=exampleData.reduce((结果,项目)=>({
…结果,
[item.id]:[…(结果[item.id]| |[]),item]
}), {});

控制台日志(简化阵列)
final result是一个对象,每个键都有一个数组?从哪里获得
subjectName
?最终结果块不是有效的JavaScript-我想你在寻找
finalArray
作为数组,每个元素都是一个对象数组。最终结果是一个对象,每个键都有一个数组?你从哪里获得
subjectName
?最终结果块不是有效的JavaScript-我认为你在寻找
finalArray
作为数组,每个元素都是一个对象数组。