簡體   English   中英

Underscorejs:如何通過組合兩個對象的值來創建新對象?

[英]Underscorejs:How to create a new object by combining values from two objects?

我遇到以下情況

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以更抽象的方式實現此目標嗎?

_.groupBy將執行您想要的操作,然后使用pick / omit將組map到嵌套對象,如您所願:

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;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM