Javascript数据结构:面向对象还是数组?

Javascript数据结构:面向对象还是数组?,javascript,Javascript,假设我在面向对象的范例中有两个类:图书馆和书籍。 它们分别具有libraryName和bookName属性。 每个图书馆都包含一系列书籍(大小不固定) 从一本书中,我想获得其图书馆的名称,并从图书馆中获得其包含的所有书籍的名称 在Javascript中实现这一点的最佳方法是什么(最好是使用面向对象的Javascript) 例如,我的代码可以这样开始: function library(libraryName){ this.LibraryName=libraryName; th

假设我在面向对象的范例中有两个类:图书馆和书籍。 它们分别具有libraryName和bookName属性。 每个图书馆都包含一系列书籍(大小不固定)

从一本书中,我想获得其图书馆的名称,并从图书馆中获得其包含的所有书籍的名称

在Javascript中实现这一点的最佳方法是什么(最好是使用面向对象的Javascript)

例如,我的代码可以这样开始:

function library(libraryName){
     this.LibraryName=libraryName;
     this.books = new Array();
}

假设,无论语言是什么,您都需要或在书中有指向该库的指针,或使用比较书名循环所有库和书

var Library = function (name, books) {
    this.name = name;
    this.books = books;
}


var Book = function (name) {
    this.name = name;
}

var libraries = [new Library("lib1", [ new Book("book1"), new Book("book2") ])];

function findBooksLibrary(bookName) {
    var libName;

    libraries.some(function (library) {
        var res = library.books.some(function (book) {
            book.name === bookName;
        });
        if (res) {
            libName = library.name;
            return true;
        } else return false;
    });

    return libName;

}

findBooksLibrary("book1");

假设,无论语言是什么,您都需要或在书中有指向该库的指针,或使用比较书名循环所有库和书

var Library = function (name, books) {
    this.name = name;
    this.books = books;
}


var Book = function (name) {
    this.name = name;
}

var libraries = [new Library("lib1", [ new Book("book1"), new Book("book2") ])];

function findBooksLibrary(bookName) {
    var libName;

    libraries.some(function (library) {
        var res = library.books.some(function (book) {
            book.name === bookName;
        });
        if (res) {
            libName = library.name;
            return true;
        } else return false;
    });

    return libName;

}

findBooksLibrary("book1");

假设,无论语言是什么,您都需要或在书中有指向该库的指针,或使用比较书名循环所有库和书

var Library = function (name, books) {
    this.name = name;
    this.books = books;
}


var Book = function (name) {
    this.name = name;
}

var libraries = [new Library("lib1", [ new Book("book1"), new Book("book2") ])];

function findBooksLibrary(bookName) {
    var libName;

    libraries.some(function (library) {
        var res = library.books.some(function (book) {
            book.name === bookName;
        });
        if (res) {
            libName = library.name;
            return true;
        } else return false;
    });

    return libName;

}

findBooksLibrary("book1");

假设,无论语言是什么,您都需要或在书中有指向该库的指针,或使用比较书名循环所有库和书

var Library = function (name, books) {
    this.name = name;
    this.books = books;
}


var Book = function (name) {
    this.name = name;
}

var libraries = [new Library("lib1", [ new Book("book1"), new Book("book2") ])];

function findBooksLibrary(bookName) {
    var libName;

    libraries.some(function (library) {
        var res = library.books.some(function (book) {
            book.name === bookName;
        });
        if (res) {
            libName = library.name;
            return true;
        } else return false;
    });

    return libName;

}

findBooksLibrary("book1");

您可以在Library类中构建一个方法来实现这一点。例如:

定义库对象

function Library (name) {
    this.libraryName = name;
    this.books = [];
}
定义原型方法“addBook”

Library.prototype.addBook = function(book) {
    book.libraryName = this.libraryName;
    this.books.push(book);
}
Library.prototype.addBook = function(book) {
    book.library = this;
    this.books.push(book);
}
正如您在addBook方法中所看到的,该书被赋予了库的名称,并被添加到库的书数组中。或者,您可以添加对库对象本身的引用

替代原型方法“addBook”

Library.prototype.addBook = function(book) {
    book.libraryName = this.libraryName;
    this.books.push(book);
}
Library.prototype.addBook = function(book) {
    book.library = this;
    this.books.push(book);
}
这确保了如果以后更新了库名称,则从Book对象中获取它将直接指向库对象,从而保持最新

接下来我们定义Book对象

function Book (name) {
    this.bookName = name;
    this.library = {};
}
这就是我们所需要的。现在我们可以与这些对象交互

//First we declare the objects
var hp = new Book("Harry Potter"),
    lib = new Library("Village Library");

//Add the book to the library
lib.addBook(hp);

//Outputs 'Village Library'
console.log(hp.library.libraryName);

lib.libraryName = "The new Library";

//Outputs 'The new Library'
console.log(hp.library.libraryName);    
另外,如果您想让一本书在多个库中,只需稍微更改
book
对象,如下所示:

function Book (name) {
    this.bookName = name;
    this.libraries = [];
}
您还必须修改“addBook”方法

Library.prototype.addBook = function(book) {
    book.libraries.push(this);
    this.books.push(book);
}

就这样

您可以在Library类中构建一个方法来实现这一点。例如:

定义库对象

function Library (name) {
    this.libraryName = name;
    this.books = [];
}
定义原型方法“addBook”

Library.prototype.addBook = function(book) {
    book.libraryName = this.libraryName;
    this.books.push(book);
}
Library.prototype.addBook = function(book) {
    book.library = this;
    this.books.push(book);
}
正如您在addBook方法中所看到的,该书被赋予了库的名称,并被添加到库的书数组中。或者,您可以添加对库对象本身的引用

替代原型方法“addBook”

Library.prototype.addBook = function(book) {
    book.libraryName = this.libraryName;
    this.books.push(book);
}
Library.prototype.addBook = function(book) {
    book.library = this;
    this.books.push(book);
}
这确保了如果以后更新了库名称,则从Book对象中获取它将直接指向库对象,从而保持最新

接下来我们定义Book对象

function Book (name) {
    this.bookName = name;
    this.library = {};
}
这就是我们所需要的。现在我们可以与这些对象交互

//First we declare the objects
var hp = new Book("Harry Potter"),
    lib = new Library("Village Library");

//Add the book to the library
lib.addBook(hp);

//Outputs 'Village Library'
console.log(hp.library.libraryName);

lib.libraryName = "The new Library";

//Outputs 'The new Library'
console.log(hp.library.libraryName);    
另外,如果您想让一本书在多个库中,只需稍微更改
book
对象,如下所示:

function Book (name) {
    this.bookName = name;
    this.libraries = [];
}
您还必须修改“addBook”方法

Library.prototype.addBook = function(book) {
    book.libraries.push(this);
    this.books.push(book);
}

就这样

您可以在Library类中构建一个方法来实现这一点。例如:

定义库对象

function Library (name) {
    this.libraryName = name;
    this.books = [];
}
定义原型方法“addBook”

Library.prototype.addBook = function(book) {
    book.libraryName = this.libraryName;
    this.books.push(book);
}
Library.prototype.addBook = function(book) {
    book.library = this;
    this.books.push(book);
}
正如您在addBook方法中所看到的,该书被赋予了库的名称,并被添加到库的书数组中。或者,您可以添加对库对象本身的引用

替代原型方法“addBook”

Library.prototype.addBook = function(book) {
    book.libraryName = this.libraryName;
    this.books.push(book);
}
Library.prototype.addBook = function(book) {
    book.library = this;
    this.books.push(book);
}
这确保了如果以后更新了库名称,则从Book对象中获取它将直接指向库对象,从而保持最新

接下来我们定义Book对象

function Book (name) {
    this.bookName = name;
    this.library = {};
}
这就是我们所需要的。现在我们可以与这些对象交互

//First we declare the objects
var hp = new Book("Harry Potter"),
    lib = new Library("Village Library");

//Add the book to the library
lib.addBook(hp);

//Outputs 'Village Library'
console.log(hp.library.libraryName);

lib.libraryName = "The new Library";

//Outputs 'The new Library'
console.log(hp.library.libraryName);    
另外,如果您想让一本书在多个库中,只需稍微更改
book
对象,如下所示:

function Book (name) {
    this.bookName = name;
    this.libraries = [];
}
您还必须修改“addBook”方法

Library.prototype.addBook = function(book) {
    book.libraries.push(this);
    this.books.push(book);
}

就这样

您可以在Library类中构建一个方法来实现这一点。例如:

定义库对象

function Library (name) {
    this.libraryName = name;
    this.books = [];
}
定义原型方法“addBook”

Library.prototype.addBook = function(book) {
    book.libraryName = this.libraryName;
    this.books.push(book);
}
Library.prototype.addBook = function(book) {
    book.library = this;
    this.books.push(book);
}
正如您在addBook方法中所看到的,该书被赋予了库的名称,并被添加到库的书数组中。或者,您可以添加对库对象本身的引用

替代原型方法“addBook”

Library.prototype.addBook = function(book) {
    book.libraryName = this.libraryName;
    this.books.push(book);
}
Library.prototype.addBook = function(book) {
    book.library = this;
    this.books.push(book);
}
这确保了如果以后更新了库名称,则从Book对象中获取它将直接指向库对象,从而保持最新

接下来我们定义Book对象

function Book (name) {
    this.bookName = name;
    this.library = {};
}
这就是我们所需要的。现在我们可以与这些对象交互

//First we declare the objects
var hp = new Book("Harry Potter"),
    lib = new Library("Village Library");

//Add the book to the library
lib.addBook(hp);

//Outputs 'Village Library'
console.log(hp.library.libraryName);

lib.libraryName = "The new Library";

//Outputs 'The new Library'
console.log(hp.library.libraryName);    
另外,如果您想让一本书在多个库中,只需稍微更改
book
对象,如下所示:

function Book (name) {
    this.bookName = name;
    this.libraries = [];
}
您还必须修改“addBook”方法

Library.prototype.addBook = function(book) {
    book.libraries.push(this);
    this.books.push(book);
}

就这样

如果您不需要以另一种方式解决问题(给定库,列出其中的所有图书),您可以只使用一个对象作为图书,并使用库的属性。发布一些代码-您所说的“面向对象”和数组到底是什么意思?那就更容易推理了。@Sirko:问题是我需要用两种方法来解决如果你不需要用另一种方法来解决(给定库,列出其中所有的书),你可以只使用一个对象来处理这些书,并为库指定一个属性。发布一些代码-你所说的“面向对象”和数组到底是什么意思?那就更容易推理了。@Sirko:问题是我需要用两种方法来解决如果你不需要用另一种方法来解决(给定库,列出其中所有的书),你可以只使用一个对象来处理这些书,并为库指定一个属性。发布一些代码-你所说的“面向对象”和数组到底是什么意思?那就更容易推理了。@Sirko:问题是我需要用两种方法来解决如果你不需要用另一种方法来解决(给定库,列出其中所有的书),你只需要用一个对象来处理这些书,并为库指定一个属性,然后用我来完成