【问题标题】:How to find id in array object then edit and delete a object in oop javascript?如何在数组对象中查找 id 然后在 oop javascript 中编辑和删除对象?
【发布时间】:2017-05-19 04:18:19
【问题描述】:

我编码演示学生管理。但是下面有问题,请帮我解决。

要求

  • 管理学生:添加、编辑、删除
  • 使用控制台构建数据表。该表包含字段:idNameAgePoint
  • 使用控制台调用函数
  • 列出所有学生得分 > = 5;

这是我的代码:


//
function Student(id, name, age, point) {
  this.id = id;
  this.name = name;
  this.age = age;
  this.point = point;
}

Student.prototype = {
  setId: function (value) {
    this.id = value;
  },

  getId: function () {
    return this.id;
  },

  setName: function (value) {
    this.name = value;
  },

  getName: function () {
    return this.name;
  },

  setAge: function (value) {
    this.age = value;
  },

  getAge: function () {
    return this.age;
  },

  setPoint: function (value) {
    this.point = value;
  },

  getPoint: function () {
    return this.point;
  },

};

function StudentController(student) {
  this.listStudent = [];
  this.id = 1;
}

StudentController.prototype = {
  addNew: function (name, age, point) {
    var student = new Student(this.id, name, age, point);
    this.listStudent.push(student);
    this.id += 1;
    return student;
  },

这是函数 find id 。但它总是返回数组对象中的最后一个 id。

  findId: function (id) {
    var student = null;
    for (var i = 0; i < this.listStudent.length; i++) {
      if (id = this.listStudent[i].getId()) {
        student = this.listStudent[i];
      }
    }

    return student;
  },

这是功能编辑学生。但它不能 getId 来自函数 findId();

  editStudent: function (student) {
    var oldStudent = this.findId(student.getId());
    console.log('oldStudent', oldStudent);
    for (var x = 0; x < this.listStudent.length; x++) {
      if (oldStudent = this.listStudent[x].getId()) {
        this.listStudent[x] = student;
      }
    }
  },

这个函数也一样editStudent()函数。

  deleteStudent: function (student) {
    var crrentStudent = this.findId(student.getId());
    for (var y = 0; y < this.listStudent.length; y++) {
      if (crrentStudent.getId() === this.listStudent[y]) {
        this.listStudent.splice(y, 1);
      }
    }
  },

this this function sort point of student > = 5. 但是看起来不起作用:(

  // find point student > = 5
  findByPoint: function (point) {
    var point = '';
    for (var i = 0; i < this.listStudent.length; i++) {
      if (this.listStudent[i].getPoint() >= point) {
        return point;
      }
    }
  },

  showStudent: function () {
    console.table(this.listStudent);
  },
};

var studentController = new StudentController();
studentController.addNew("Hanh", 20, 8);
studentController.findId(1);
studentController.editStudent();
studentController.deleteStudent();

请帮我解决和解释。太感谢了 !!

【问题讨论】:

    标签: javascript arrays oop


    【解决方案1】:

    问题很简单,对于比较运算符,您需要if condition 中的=== 用于赋值和添加

    更改findId()函数

    findId: function (id) {
        var student = null;
        for (var i = 0; i < this.listStudent.length; i++) {
          if (id == this.listStudent[i].getId()) {    // change here
            student = this.listStudent[i];
          }
        }
    
        return student;
      },
    

    editStudent函数中

    editStudent: function (student) {
        var oldStudent = this.findId(student.getId());
        console.log('oldStudent', oldStudent);
        for (var x = 0; x < this.listStudent.length; x++) {
          if (oldStudent == this.listStudent[x].getId()) {    //change here 
            this.listStudent[x] = student;
          }
        }
      },
    

    【讨论】:

    • 感谢您的回答。所以请帮我解释一下为什么函数editStudent不能从函数findId调用student.getId()
    • 您没有将任何参数传递给 editStudent 函数,
    猜你喜欢
    • 2015-07-04
    • 2022-01-18
    相关资源
    最近更新 更多