【问题标题】:Trying to add an object to an Array in Javascript尝试在Javascript中将对象添加到数组
【发布时间】:2021-04-12 17:37:51
【问题描述】:

我正在做一个应用程序,但我遇到了一个问题:我正在尝试向数组添加值但我做不到,返回我的名为 create_division_and_grades 的函数的值是一个空数组 []

async function create_division_and_grades(grades /*Array */, divisions /*Object */, school /*Object*/) {

    var new_grades = []

    await grades.forEach(async grade => {

        const new_grade = new Grade({
            number: grade,
            school,
        })

        await divisions[`${grade}`].forEach(async division => {
            const new_division = new Division({
                character: division,
                school,
                grade: new_grade,
            })
            const saved_division = await new_division.save()
            new_grade.divisions.push(saved_division)

        })


        const saved_grade = await new_grade.save()


        new_grades.push(saved_grade)

    })

    return new_grades

这就是我使用函数的方式:

const grades_primary = await create_division_and_grades(info.grades_primary, info.divisions_primary, new_school)

info.grades_primary 是: [1, 2, 3, 4, 5, 6] info.divisions_primary 是: { "1" : ["A", "B"], "2":["A", "B"], "3":["A", "B"], "4":["A", "B"], "5":["A", "B"], "6":["A", "B"] }

【问题讨论】:

  • .forEach() 的回调应该是同步的,所以你不能让它 async 并期望它正常运行,而是使用普通的 for 循环
  • 你可能想awaitPromise.all(promises)

标签: javascript arrays function object


【解决方案1】:

在您的情况下,您最好使用 Array.map() 来实现您的目标

async function create_division_and_grades(grades /*Array */, divisions /*Object */, school /*Object*/) {
    const createdGrades = await Promise.all(
        grades.map(async grade => {
            const gradeToSave = new Grade({
                number: grade,
                school
            });

            const gradeDivisionList = divisions[`${grade}`];

            gradeToSave.divisions = await Promise.all(
                gradeDivisionList.map(division => {
                    const divisionToSave = new Division({
                        character: division,
                        school,
                        grade: gradeToSave
                    });

                    return divisionToSave.save();
                })
            );

            return gradeToSave.save();
        })
    );

    return createdGrades;
}

或者如果您想按顺序保存实体,您可以使用另一种方法

export const runSequentially = (array, sequenceCallback) =>
    array.reduce(
        (promise, element) =>
            promise.then(promiseResult =>
                sequenceCallback(element).then(callbackResult => [...promiseResult, callbackResult])
            ),
        Promise.resolve([])

async function create_division_and_grades(grades /*Array */, divisions /*Object */, school /*Object*/) {
    const createdGrades = await runSequentially(grades, async grade => {
        const gradeToSave = new Grade({
            number: grade,
            school
        });

        const gradeDivisionList = divisions[`${grade}`];

        gradeToSave.divisions = await runSequentially(gradeDivisionList, division => {
            const divisionToSave = new Division({
                character: division,
                school,
                grade: gradeToSave
            });

            return divisionToSave.save();
        });

        return gradeToSave.save();
    });

    return createdGrades;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 2023-03-05
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多