Tengo tres matrices: estudiantes, tipo y marcas. Quiero combinarlos en una matriz llamada student_marks para obtener las calificaciones de cada estudiante con tipos de marcas. Pero la función de marca de objeto se devuelve como una cadena y no se ejecuta en javascript como se muestra en el resultado del código de imagen.
Quiero obtener este resultado:
{student: '2'; totalmarks: '0'; mark: {'typeid'="marks" ,'typeid'="marks" , 'typeid'="marks" }}Entonces, como un todo, la matriz de resultados que es student_marks se verá así:
{student: '2'; totalmarks: '0'; mark: {'1'="1" ,'2'="2" , '3'="3" }} {student: '3'; totalmarks: '0'; mark: {'1'="5" ,'2'="4" , '3'="7" }} {student: '4'; totalmarks: '0'; mark: {'1'="8" ,'2'="7" , '3'="9" }}Aquí está mi ejemplo de código escrito en js:
let std = [ 1, 2, 3, 4 ]; let marks = [{ type: '2', marks: '2' }, { type: '1', marks: '1' }, { type: '3', marks: '3' }, { type: '2', marks: '2' }, { type: '1', marks: '1' }, { type: '3', marks: '3' }, { type: '2', marks: '2' }, { type: '1', marks: '1' }, { type: '3', marks: '3' }, { type: '2', marks: '2' }, { type: '1', marks: '1' }, { type: '3', marks: '3' } ]; let type = [2, 1, 3]; let ri = 0; let student_marks = []; let registrationIds = []; let total_marks = []; std.forEach(item => { registrationIds[ri] = item; // type[ri]=marks[ri]; // marks:marks[ri]; student_marks.push({ student: item, mark: () => { for (let i = 0; i < marks_type.length; i++) { // m[marks_type[i]]=marks[i][ri]; m = [{ type: marks_type[i], marks: marks[i]['marks'], }]; // m:{ // marks_type[i]=marks[i][ri]; // }; } console.log(m); return m; }, // totalmarks: total_marks[ri].value, }); // totalmark[ri]=total_marks[ri].value; ri++; }); console.log(student_marks);Dado que las funciones de JavaScript son ciudadanos de primera clase, lo que significa que se tratan de manera similar a las variables, la función en mark dentro del objeto student_marks se le asigna y no se ejecuta. También tenga en cuenta que el valor devuelto es una función que ha mencionado como una cadena. Para que tu código funcione,
Envuelva esa función en algún lugar y simplemente llámela en su lugar.
const calculateMark = () => { for (let i = 0; i < marks_type.length; i++) { // m[marks_type[i]]=marks[i][ri]; m = [{ type: marks_type[i], marks: marks[i]['marks'], }]; // m:{ // marks_type[i]=marks[i][ri]; // }; } console.log(m); return m; }; student_marks.push({ student: item, mark: calculateMark() // totalmarks: total_marks[ri].value, });Usar IIFE
student_marks.push({ student: item, mark: (() => { for (let i = 0; i < marks_type.length; i++) { // m[marks_type[i]]=marks[i][ri]; m = [{ type: marks_type[i], marks: marks[i]['marks'], }]; // m:{ // marks_type[i]=marks[i][ri]; // }; } console.log(m); return m; })(), // totalmarks: total_marks[ri].value, });