Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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 下划线JS:如何通过组合来自两个对象的值来创建新对象?_Javascript_Jquery_Underscore.js - Fatal编程技术网

Javascript 下划线JS:如何通过组合来自两个对象的值来创建新对象?

Javascript 下划线JS:如何通过组合来自两个对象的值来创建新对象?,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我遇到了以下情况 var obj1= [ { "id": 97, "name": "Sample1", "classId": 751, "gradeId": 1, "studentId": 1 }, { "id": 98, "name": "Sample2",

我遇到了以下情况

var obj1= [
          {
            "id": 97,
            "name": "Sample1",
            "classId": 751,
            "gradeId": 1,
            "studentId": 1
          },
          {
            "id": 98,
            "name": "Sample2",
            "classId": 751,
            "gradeId": 1,
            "studentId": 2
          },
          {
            "id": 97,
            "name": "Sample1",
            "classId": 751,
            "gradeId": 2,
            "studentId": 3
          },
          {
            "id": 98,
            "name": "Sample2",
            "classId": 751,
            "gradeId": 2,
            "studentId": 4
          }
        ]
现在,如果id相同,我需要以以下形式组合相同的对象值

var obj2=[
        {
            "id": 97,
            "name": "Sample1",
            "classId": 751,
            "rating":[
            {
            "gradeId": 1,
            "studentId": 1
            }
            {
            "gradeId": 2,
            "studentId": 3
            }
            ]
          },
           {
            "id": 98,
            "name": "Sample2",
            "classId": 751,
            "rating":[
            {
            "gradeId": 1,
            "studentId": 2
            }
            {
            "gradeId": 2,
            "studentId": 4
            }
            ]
          }

        ]
我正在遍历所有对象,如果id相同,我将创建一个具有组合值的新对象,我觉得这有点复杂

我可以通过更抽象的方式通过下划线js来实现这一点吗?

将执行您想要的操作,然后根据需要使用/将组添加到嵌套对象:

var obj2 = _.map(_.groupBy(obj1, "id"), function(group) {
    var o = _.omit(group[0], "gradeId", "studentId");
    o.rating = _.map(group, function(s) {
        return _.pick(s, "gradeId", "studentId");
    });
    return o;
});

你能分享你的代码吗?遗憾的是,我不知道有下划线或Lodash等价物,但如果你感兴趣,[jQuery.extend]有一个
deep
参数,它执行深度复制,遍历对象的每一层。@Terry:嗯,这对解决这个问题有什么帮助?非常感谢。。!!这有帮助