通过组合三个数组来获得具有类型的学生分数,但返回的函数是一个字符串

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,
  });