Javascript数据结构:面向对象还是数组?
假设我在面向对象的范例中有两个类:图书馆和书籍。 它们分别具有libraryName和bookName属性。 每个图书馆都包含一系列书籍(大小不固定) 从一本书中,我想获得其图书馆的名称,并从图书馆中获得其包含的所有书籍的名称 在Javascript中实现这一点的最佳方法是什么(最好是使用面向对象的Javascript) 例如,我的代码可以这样开始:Javascript数据结构:面向对象还是数组?,javascript,Javascript,假设我在面向对象的范例中有两个类:图书馆和书籍。 它们分别具有libraryName和bookName属性。 每个图书馆都包含一系列书籍(大小不固定) 从一本书中,我想获得其图书馆的名称,并从图书馆中获得其包含的所有书籍的名称 在Javascript中实现这一点的最佳方法是什么(最好是使用面向对象的Javascript) 例如,我的代码可以这样开始: function library(libraryName){ this.LibraryName=libraryName; th
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:问题是我需要用两种方法来解决如果你不需要用另一种方法来解决(给定库,列出其中所有的书),你只需要用一个对象来处理这些书,并为库指定一个属性,然后用我来完成