Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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
如何格式化JSON对象数组(Javascript)_Javascript_Arrays_Json_Lodash - Fatal编程技术网

如何格式化JSON对象数组(Javascript)

如何格式化JSON对象数组(Javascript),javascript,arrays,json,lodash,Javascript,Arrays,Json,Lodash,我正在与一个我不知道如何处理的苛刻要求作斗争 我收到一个数组,如下所示: [{ "student": "21_A_1", "sport": "badminton" }, { "student": "21_C_1", "sport": "badminton" }, { "student": "21_A_2", "sport": "badminton" }, { "student": "21_B_1", "sport": "footba

我正在与一个我不知道如何处理的苛刻要求作斗争

我收到一个数组,如下所示:

[{
    "student": "21_A_1",
    "sport": "badminton"
}, {
    "student": "21_C_1",
    "sport": "badminton"
}, {
    "student": "21_A_2",
    "sport": "badminton"
}, {
    "student": "21_B_1",
    "sport": "football"
}, {
    "student": "21_A_2",
    "sport": "football"
}]
要求:将其转换为具有以下格式的数组:

[{
    "student": "21_A_1",
    "sport": ["badminton"]
}, {
    "student": "21_C_1",
    "sport": ["badminton"]
}, {
    "student": "21_A_2",
    "sport": ["badminton","football"]
}, {
    "student": "21_B_1",
    "sport": ["football"]
}]
我发现库中有一个功能组,返回了非常封闭的结果,但不是预期的结果:

_.groupBy(array, 'student');
结果:

{
    "21_A_1": [{
        "student": "21_A_1",
        "sport": "badminton"
    }],
    "21_C_1": [{
        "student": "21_C_1",
        "sport": "badminton"
    }],
    "21_A_2": [{
        "student": "21_A_2",
        "sport": "badminton"
    }, {
        "student": "21_A_2",
        "sport": "football"
    }],
    "21_B_1": [{
        "student": "21_B_1",
        "sport": "football"
    }]
}

非常感谢您的建议。

我们可以使用数组的“.reduce”函数并聚合结果,如下所示

var测试=[{ 学生:21_A_1, 运动项目:羽毛球 }, { 学生:21_C_1, 运动项目:羽毛球 }, { 学生:21岁, 运动项目:羽毛球 }, { 学生:21_B_1, 运动:足球 }, { 学生:21岁, 运动:足球 }] const result=test.reduceres,x=>{ res[x.student]=res[x.student]|{学生:x.student,体育:[] res[x.student].sport.pushx.sport 返回res; },{}
console.logresult我们可以使用数组的“.reduce”函数,聚合结果如下

var测试=[{ 学生:21_A_1, 运动项目:羽毛球 }, { 学生:21_C_1, 运动项目:羽毛球 }, { 学生:21岁, 运动项目:羽毛球 }, { 学生:21_B_1, 运动:足球 }, { 学生:21岁, 运动:足球 }] const result=test.reduceres,x=>{ res[x.student]=res[x.student]|{学生:x.student,体育:[] res[x.student].sport.pushx.sport 返回res; },{}
console.logresult您需要将分组项目与其运动属性进行映射,并使用分组信息构建新对象

var数组=[{学生:21_A_1,运动:羽毛球},{学生:21_C_1,运动:羽毛球},{学生:21_A_2,运动:羽毛球},{学生:21_B_1,运动:足球},{学生:21_A_2,运动:足球}], 分组=\u数组 .groupBy'student' .mapgroup,student=>{student,sport:{uu.mapgroup,'sport'} 价值 console.loggroup; .作为控制台包装{最大高度:100%!重要;顶部:0;}
您需要将分组项目与其运动属性进行映射,并使用分组信息构建新对象

var数组=[{学生:21_A_1,运动:羽毛球},{学生:21_C_1,运动:羽毛球},{学生:21_A_2,运动:羽毛球},{学生:21_B_1,运动:足球},{学生:21_A_2,运动:足球}], 分组=\u数组 .groupBy'student' .mapgroup,student=>{student,sport:{uu.mapgroup,'sport'} 价值 console.loggroup; .作为控制台包装{最大高度:100%!重要;顶部:0;} 结合使用:

康斯特数据=[{学生:21_A_1,运动:羽毛球},{学生:21_C_1,运动:羽毛球},{学生:21_A_2,运动:羽毛球},{学生:21_B_1,运动:足球},{学生:21_A_2,运动:足球}]; const result=Object.values data.reducea,c=>a[c.student]=a[c.student]|{学生:c.student,sport:[]}.sport.pushc.sport,a,{} ; console.logresult 结合使用:

康斯特数据=[{学生:21_A_1,运动:羽毛球},{学生:21_C_1,运动:羽毛球},{学生:21_A_2,运动:羽毛球},{学生:21_B_1,运动:足球},{学生:21_A_2,运动:足球}]; const result=Object.values data.reducea,c=>a[c.student]=a[c.student]|{学生:c.student,sport:[]}.sport.pushc.sport,a,{} ;
console.logresult;最好是你自己构造算法,而不是为此使用lodash…最好是你自己构造算法,而不是为此使用lodash…非常感谢快速解决方案,所有都在工作,但是,我标记这是答案,因为我正在使用lodash。我不知道哪一个是最佳实践,所以如果你们有任何最佳实践,请继续分享。因为数组最多可以包含数千个项目。非常感谢您提供的快速解决方案,所有项目都正常工作,但是,我将此标记为答案,因为我使用的是lodash。我不知道哪一个是最佳实践,所以如果你们有任何最佳实践,请继续分享。因为阵列最多可以包含数千项。