Could anyone tell me why the codes below failed to pass this challenge? Many thanks!
bookList should not change and still equal ["The Hound of the Baskervilles", "On The Electrodynamics of Moving Bodies", "Philosophiæ Naturalis Principia Mathematica", "Disquisitiones Arithmeticae"] .
// The global variable
const bookList = ["The Hound of the Baskervilles", "On The Electrodynamics of Moving Bodies", "Philosophiæ Naturalis Principia Mathematica", "Disquisitiones Arithmeticae"];
// Change code below this line
function add(arr, bookName) {
let newList = [];
newList.push(bookName)
return arr.concat(newList);
// Change code above this line
}
// Change code below this line
function remove(arr, bookName) {
const book_index = bookList.indexOf(bookName);//1
if (book_index >= 0) {
arr.splice(book_index,1)
return arr;
// Change code above this line
}
}
I did and also get the results I want, but couldn’t figure out why my code failed to pass - bookList should not change and still equal ["The Hound of the Baskervilles", "On The Electrodynamics of Moving Bodies", "Philosophiæ Naturalis Principia Mathematica", "Disquisitiones Arithmeticae"] .
function remove(arr, bookName) {
const book_index = bookList.indexOf(bookName);//1
if (book_index >= 0) {
arr.splice(book_index,1)
return arr;
// Change code above this line
}
}
One issue is that you should not be referring to the global variable.
The other issue is splice. Google that mdn article and reread the first 9 words of the first paragraph.
And remember that passing in an array does not make a new copy - reference types (including objects and arrays) are passed by reference (memory address). If I write the address to my house on two slips of paper, I do not have a new house, just two copies of the address that point to the same thing.
The other problem with this function is what does it return if the index isn’t found? I don’t think that breaks a test, but it should.