#javascript #for-loop
#javascript #for-цикл
Вопрос:
Как вы можете преобразовать эту функцию? Я чувствую, что вложенный цикл for будет работать, но я не понял, как заставить его работать.
Вот функция:
class Librarian {
constructor(name, library) {
this.name = name;
this.library = library;
}
findBook(bookTitle) {
for (var i = 0; i < this.library.shelves.fantasy.length; i ){
if (bookTitle === this.library.shelves.fantasy[i].title){
this.library.shelves.fantasy.splice(i, 1);
return `Yes, we have ${bookTitle}`;
}
} for (var i = 0; i < this.library.shelves.fiction.length; i ){
if (bookTitle === this.library.shelves.fiction[i].title){
this.library.shelves.fiction.splice(i, 1);
return `Yes, we have ${bookTitle}`;
}
} for (var i = 0; i < this.library.shelves.nonFiction.length; i ){
if (bookTitle === this.library.shelves.nonFiction[i].title){
this.library.shelves.nonFiction.splice(i, 1);
return `Yes, we have ${bookTitle}`;
}
} return `Sorry, we do not have ${bookTitle}`;
}
}
Вот моя попытка:
findBook(bookTitle) {
for (var j = 0; j < this.libray.shelves.length; j ) {
for (var i = 0; i < this.library.shelves[i].length; i ){
if (bookTitle === this.library.shelves[j].title){
this.library.shelves[j].splice(i, 1);
return `Yes, we have ${bookTitle}`;
}
}
} return `Sorry, we do not have ${bookTitle}`;
}
Комментарии:
1.
shelves
Похоже, что это объект, а не массив, поэтому вам нужно будет использоватьfor … in
для них.2. @Bergi или использовать что-то вроде
Object.values(...)
Ответ №1:
Получите названия жанров, а затем выполните цикл над ними:
findBook(bookTitle) {
const genres = Object.keys(this.library.shelves);
for (var i = 0; i < genres.length; i ) {
const genre = genres[i];
for (var j = 0; j < this.library.shelves[genre].length; j ) {
if (bookTitle === this.library.shelves[genre][j].title) {
this.library.shelves[genre].splice(i, 1);
return `Yes, we have ${bookTitle}`;
}
}
}
return `Sorry, we do not have ${bookTitle}`;
}
Ответ №2:
Похоже, вы действительно близки к тому, чтобы заставить это работать, вам просто нужно повторить this.library.shelves[j].length
во втором цикле for вместо i
. Затем вам нужно получить доступ к i-му элементу j-й полки.
findBook(bookTitle) {
for (var j = 0; j < this.libray.shelves.length; j ) {
for (var i = 0; i < this.library.shelves[j].length; i ){
if (bookTitle === this.library.shelves[j][i].title){
this.library.shelves[j].splice(i, 1);
return `Yes, we have ${bookTitle}`;
}
}
}
return `Sorry, we do not have ${bookTitle}`;
}
Комментарии:
1. Ах, не видел свойств жанра в исходном коде. ответ @marzelin хорош.