Проблема с возвратом результата из функции

Привет, я не могу вернуть информацию из функции? Когда я пытаюсь, я всегда получаю сообщение «неопределенное».

Когда я console.info переменные внутри функции, информация кажется правильной.

Цель функции — добавить данные о продажах сотрудника в объект «сотрудник».

Это то, что должно произойти -

{
    id: 3,
    firstName: 'Fred',
    lastName: 'Jones',
    gender: 'Non-Binary',
    age: 54,
    position: 'Salesperson',
    sales: [{
            staffId: 3,
            item: 'Pre-built PC',
            price: 1999.95,
            date: '02-09-2022'
        },
        {
            staffId: 3,
            item: 'USB Cable',
            price: 5,
            date: '02-09-2022'
        },
        {
            staffId: 3,
            item: 'HDMI Cable',
            price: 15.45,
            date: '02-09-2022'
        }
    ]
}

Это функция, которая у меня есть -

function mapEmpAndSales() {
    employeesData.map(function(employee) {
        let newEmpInfo = Object.assign({}, employee);
        // console.info("1");
        // console.info(newEmpInfo.id);
        newEmpInfo.sales = salesData.filter(function(element) {
            return element.staffId == employee.id;
        });
        // console.info("2");
        // console.info("XXXXXXXX");
        // console.info(newEmpInfo);
        return newEmpInfo;
        // result = newEmpInfo;
    });
    // console.info(result);
    // return result;
}
const finalresult = mapEmpAndSales();
// let newInfo = mapEmpAndSales();
console.info("XXXXXXX");
console.info(finalresult);

Вы не используете return непосредственно в своей функции

Daniel A. White 13.02.2023 02:34
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
1
1
62
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Эта строка:

// return result;

Необходим для передачи данных обратно через вашу функцию. Это не должно быть закомментировано. Но я не думаю, что вы хотите вернуть результат, а вернуть переменную employeeData.

return employeesData;

Извините, новичок в JS и пытаюсь понять, извините, если это неправильно. С помощью этой строки фильтра я пытаюсь сказать, что если идентификатор персонала = идентификатор сотрудника, добавьте это к объекту и установите его через employee.sale. Если вы войдете в систему через консоль newEmpInfo, он вернется правильно, как показано выше, и что должно произойти.

CodePlanB1234 13.02.2023 02:40

Это работает. Спасибо. Будет ли возвращенная переменная employeeData перезаписывать исходные данные?

CodePlanB1234 13.02.2023 02:47

Я думаю, это потому, что вы не возвращаетесь в функцию «mapEmpAndSales», если вы видите, что ваш возврат находится внутри «функции (сотрудник) {...}». Итак, вы создаете эту функцию «функция (сотрудник)» и возвращаетесь в нее, но в теле вашей основной функции нет возврата.

Попробуйте создать константу вне функции карты, например 'const result = []', и в вашей функции карты вы добавите к ней результат, а в своей основной функции вы действительно вернете результат.

Так:

function mapEmpAndSales() {
    const result = [];
    employeesData.map(function(employee) {
        let newEmpInfo = Object.assign(Object.assign({}, employee));
        newEmpInfo.sales = salesData.filter(function(element) {
            return element.staffId == employee.id;
        });
        result.push(...newEmpInfo); // IF IT RETURNS A ARRAY
        result.push(newEmpInfo); //IF IT RETURNS ONLY ONE VALUE
    });
    return result;
}

Ваш mapEmpAndSales ничего не вернул, вам нужно вернуть значение employeesData.map(...).

function mapEmpAndSales() {
    return employeesData.map(function(employee) {
        // ....
    });
}

Функция map возвращает массив, который должен быть захвачен и возвращен функцией mapEmpAndSales.

Решение уже есть в вашем коде, просто раскомментируйте строку //return result; следующим образом:

function mapEmpAndSales() {
    let result = employeesData.map(function(employee) {
        let newEmpInfo = Object.assign({}, employee);
        newEmpInfo.sales = salesData.filter(function(element) {
            return element.staffId == employee.id;
        });
        return newEmpInfo;
    });
    return result;
}
const finalresult = mapEmpAndSales();
console.info(finalresult);

Другие вопросы по теме