1. ホーム
  2. javascript

[解決済み] FCC Refactor Global Variables Out of Functions, array is not using both methods used together.

2022-02-17 05:58:56

質問

新しいFCCの資料を読んでいるところです。確かに部分的に問題がある。これは、私は近づいたが、それは最終的なテストに合格しないので、まだ間違っている。

"newestBookListは["The Hound of the Baskervills", "Philosophiæ Naturalis Principia Mathematica", "Disquisitiones Arithmeticae", "A Brief History of Time"]" と一致するはずである。

console.log(newestBookList) を実行すると、正しい項目は削除されますが、"Brief History" が追加されません。何か提案はありますか?両方のメソッドが個別に動作し、一緒に動作しない理由や、BDD を使用してそれをテストする方法がよくわかりません...。

// the global variable
var bookList = ["The Hound of the Baskervilles", "On The Electrodynamics of Moving Bodies", "Philosophiæ Naturalis Principia Mathematica", "Disquisitiones Arithmeticae"];

/* This function should add a book to the list and return the list */
// New parameters should come before the bookName one

// Add your code below this line
function add(arr, bookName) {
  return arr.concat([bookName]);
}

  // Add your code above this line

/* This function should remove a book from the list and return the list */
// New parameters should come before the bookName one

// Add your code below this line
function remove(arr, bookName) {
  if (bookList.indexOf(bookName) >= 0) {
    var index = bookList.indexOf(bookName);
    return bookList.slice(0, index).concat(bookList.slice(index + 1));
    // Add your code above this line
  }
}

var newBookList = add(bookList, 'A Brief History of Time');
var newerBookList = remove(bookList, 'On The Electrodynamics of Moving Bodies');
var newestBookList = remove(add(bookList, 'A Brief History of Time'), 'On The Electrodynamics of Moving Bodies');

//console.log(bookList);
//console.log(newBookList);
//console.log(newerBookList);
console.log(newestBookList);

解決方法は?

あなたの remove 関数が参照しているのは オリジナル bookList ではなく、渡された配列になります。すべての bookList への参照は arr の参照に渡されるパラメータ( remove 関数)を使用します。

// the global variable
var bookList = ["The Hound of the Baskervilles", "On The Electrodynamics of Moving Bodies", "Philosophiæ Naturalis Principia Mathematica", "Disquisitiones Arithmeticae"];

/* This function should add a book to the list and return the list */
// New parameters should come before the bookName one

// Add your code below this line
function add(arr, bookName) {
  return arr.concat([bookName]);
}

  // Add your code above this line

/* This function should remove a book from the list and return the list */
// New parameters should come before the bookName one

// Add your code below this line
function remove(arr, bookName) {
  if (arr.indexOf(bookName) >= 0) {
    var index = arr.indexOf(bookName);
    return arr.slice(0, index).concat(arr.slice(index + 1));
    // Add your code above this line
  } else console.log('n');
}

var newBookList = add(bookList, 'A Brief History of Time');
var newerBookList = remove(bookList, 'On The Electrodynamics of Moving Bodies');
const added = add(bookList, 'A Brief History of Time');
var newestBookList = remove(added, 'On The Electrodynamics of Moving Bodies');

//console.log(bookList);
// console.log(newBookList);
//console.log(newerBookList);
console.log(newestBookList);

をチェックすることを検討してください。 indexOf は一度だけです。

function remove(arr, bookName) {
  var index = arr.indexOf(bookName);
  if (index === -1) return;
  return [...arr.slice(0, index), ...arr.slice(index + 1)];
}