繁体   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