簡體   English   中英

如何將數組變成對象和數組的嵌套數組?

[英]How to turn array into an nested array of objects and arrays?

我想將具有相同category編號的對象組合到該categorycourse s 數組中。
但我希望最終形式是嵌套數組和對象的數組。

例如,我有一個包含以下數據的數組:

var arr = [
    { category : 1, course : "course 1" },
    { category : 1, course : "course 2" },
    { category : 2, course : "course 3" }
]

我希望新數組看起來像:

output = [
  { category : 1,
    courses : [
      { course : "course 1" },
      { course : "course 2" }
    ]
  },
  { category : 2,
    courses : [
      { course : "course 3" }
    ]
  }
]

當前代碼:

var output = [], cnt = 0, i;

for (i = 0; i < arr.length; i++) {
  output[category] = this.coursesData[i];
  cnt++;
}

電流輸出:

output = [
    1 : { category : 1, course : "course 2" },
    2 : { category : 2, course : "course 3" },
]

期望輸出:

所有具有相同類別的課程都需要合並到該特定類別本身下。

output = [
  { category : 1,
    courses : [
      { course : "course 1" },
      { course : "course 2" }
    ]
  },
  { category : 2,
    courses : [
      { course : "course 3" }
    ]
  }
]

我嘗試合並具有相同 id 的數組(在我的例子中是類別),但沒有獲得所需的輸出。

你可以嘗試這樣的事情:

const arr = [
    { category: 1, course: "course 1" },
    { category: 1, course: "course 2" },
    { category: 2, course: "course 3" }
];

function transform(arr) {
    const output = {};

    for (let i = 0; i < arr.length; i++) {
        let course = arr[i];
        if (output[course.category]) {
            output[course.category].push(course);
        } else {
            output[course.category] = [];
            output[course.category].push(course);
        }
    }

    const result = [];
    for (let key in output) {
        result.push({
            "category": key,
            "courseList": output[key].map(o => { return { "course": o.course }; })
        })
    }
    console.log(result);
}

transform(arr);

使用Lodash或類似的庫,可以很好地優化邏輯,但為了基本理解,已經用基本的 JS 編寫代碼

暫無
暫無

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

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