gpt4 book ai didi

javascript - 通过数组属性重复数组对象元素

转载 作者:行者123 更新时间:2023-11-29 18:57:38 25 4
gpt4 key购买 nike

我的问题是这样的;我有一系列类(class),每个类(class)都有其名称和由类(class)组成的数组(每节课都有自己的日子)。

即:

courses = [
{name: 'Math', lessons: [{day: 'Wednesday'}, {day: 'Thursday'}]},
{name: 'Sports', lessons: [{day: 'Monday'}]}
]

我想要的结果是:

courses_flattened = [
{name: 'Math', lesson: {day: 'Wednesday'}},
{name: 'Math', lesson: {day: 'Thursday'}},
{name: 'Sports', lesson: {day: 'Monday'}}
]

目前我正在做的是使用 array.map 遍历类(class),然后对于每门类(class),我返回一个包含所有类(class)时间的数组。收到数组数组后,我正在使用:

courses_flattened = [].concat.apply([], courses_flat)

获取包含所有类(class)的数组,每门类(class)包含 1 节课。

完整代码:

courses_flat = courses.map((course) -> {
var lessons = [];
course.lessons.forEach((lesson) -> {
lessons.push({name: course.name, lesson: {day: lesson.day}})
});
return lessons;
});

有没有更好的方法来接收这种结果?

我可以选择使用 Lodash。

最佳答案

嵌套循环可以用 flatMap 重写。它不是内置在 JS 中,但您可以像这样轻松定义它:

let flatMap = (a, fn) => [].concat(...a.map(fn));

(请注意,这本质上是您的 [].concat.apply 事情)。

然后

courses_flattened = flatMap(courses, ({name, lessons}) => 
lessons.map(lesson => ({name, lesson})));

lodash 是一样的:

courses_flattened = _.flatMap(courses, ({name, lessons}) => 
_.map(lessons, lesson => ({name, lesson})));

关于javascript - 通过数组属性重复数组对象元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48612976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com