Привет, я не могу вернуть информацию из функции? Когда я пытаюсь, я всегда получаю сообщение «неопределенное».
Когда я 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 result;
Необходим для передачи данных обратно через вашу функцию. Это не должно быть закомментировано. Но я не думаю, что вы хотите вернуть результат, а вернуть переменную employeeData.
return employeesData;
Извините, новичок в JS и пытаюсь понять, извините, если это неправильно. С помощью этой строки фильтра я пытаюсь сказать, что если идентификатор персонала = идентификатор сотрудника, добавьте это к объекту и установите его через employee.sale. Если вы войдете в систему через консоль newEmpInfo, он вернется правильно, как показано выше, и что должно произойти.
Это работает. Спасибо. Будет ли возвращенная переменная employeeData перезаписывать исходные данные?
Я думаю, это потому, что вы не возвращаетесь в функцию «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);
Вы не используете return непосредственно в своей функции