通过组合三个数组来获得具有类型的学生分数,但返回的函数是一个字符串
getting student marks with types by combining three arrays but returned a function is a string
我有三个数组:学生、类型和分数。我想将这些组合成一个名为 student_marks 的数组,以获取每个学生的分数和分数类型。但是object mark函数返回的是字符串,并没有在javascript中执行,如图code result.
我想得到这个结果:
{student: '2'; totalmarks: '0'; mark: {'typeid'="marks" ,'typeid'="marks" , 'typeid'="marks" }}
所以作为一个整体,结果数组 student_marks 看起来像:
{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" }}
这里是我的代码示例是用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);
由于 JavaScript 函数首先是 class 公民,这意味着它被视为类似于变量,对象 student_marks
中的 mark
中的函数被分配给它并且未执行。另请注意,返回值是您提到的字符串的函数。为了使您的代码正常工作,
- 方法一:
将该函数包装在某处,然后调用它。
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,
});
- 方法二:
使用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,
});
我有三个数组:学生、类型和分数。我想将这些组合成一个名为 student_marks 的数组,以获取每个学生的分数和分数类型。但是object mark函数返回的是字符串,并没有在javascript中执行,如图code result.
我想得到这个结果:
{student: '2'; totalmarks: '0'; mark: {'typeid'="marks" ,'typeid'="marks" , 'typeid'="marks" }}
所以作为一个整体,结果数组 student_marks 看起来像:
{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" }}
这里是我的代码示例是用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);
由于 JavaScript 函数首先是 class 公民,这意味着它被视为类似于变量,对象 student_marks
中的 mark
中的函数被分配给它并且未执行。另请注意,返回值是您提到的字符串的函数。为了使您的代码正常工作,
- 方法一:
将该函数包装在某处,然后调用它。
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,
});
- 方法二:
使用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,
});