删除数组的对象而不循环所有数组

Mir*_*ror 1 javascript

我希望能够从数组中删除一个对象而不循环所有对象数组,以查看当前数组元素是否具有我想要删除的项的ID.

JavaScript的:

function CBooks() {
    this.BooksArray = [];

    this.AddBook = function(divID, sContents) {
        this.BooksArray.push(new CBook());
        pos = this.BooksArray.length - 1;
        this.BooksArray[pos].ArrayID = pos;
        this.BooksArray[pos].DivID = divID;
        this.BooksArray[pos].Contents = sContents;
    }

    this.DelBook = function(divID) {
        this.BooksArray.splice(...);
    }
}

function CBook() {
    this.ArrayID = 0;
    this.DivID = "";
    this.Contents = "";
}
Run Code Online (Sandbox Code Playgroud)

我像这样初始化对象:

var oBooks = new CBooks();
Run Code Online (Sandbox Code Playgroud)

我添加了这样一本新书:

oBooks.AddBook("divBook1", "blahblahblah");
//Creation of the div here
oBooks.AddBook("divBook2", "blehblehbleh");
//Creation of the div here
Run Code Online (Sandbox Code Playgroud)

现在,用户可以单击显示每本书的div中的X按钮,以便他可以删除该书.所以X按钮包含:

onclick=oBooks.DelBook(this.id);
Run Code Online (Sandbox Code Playgroud)

现在显然在DelBook(divID)函数中,我可以循环遍历BooksArray的长度并查看每个元素,如果它的divID等于参数并在那时拼接,但我想避免循环.

有什么办法吗?

提前致谢

int*_*xel 5

这样的东西会起作用,但前提是你愿意放弃用于哈希的数组.

您的代码已编辑

function CBooks() {
  this.BooksHash = {};

  this.AddBook = function(divID, sContents) {
    var book = new CBook();
    //book.ArrayID = pos; //you don't actually need this anymore using a hash
    book.DivID = divID;
    book.Contents = sContents;
    this.BooksHash[book.DivID] = book;
  }

  this.DelBook = function(divID) {
    delete this.BooksHash[divID];
  }
}

function CBook() {
  //this.ArrayID = 0; // same here
  this.DivID = "";
  this.Contents = "";
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

  • 除非你真的需要它在一个数组中,否则这就是我的方式. (2认同)