簡體   English   中英

如何檢查這個 function 是否為真,或者如果為假則返回一個空數組?

[英]How can I check this function for truthy or return an empty array if falsy?

我正在看這個作業,我的問題是關於最后加粗的部分:

 // Do not edit the code below. var myGroceryList = ['chips', 'pizza', 'hotpockets', 'MtnDew', 'corndogs']; // Do not edit the code above.

在這里,我們將編寫一個 function 來模擬購物和檢查我們的雜貨清單上的東西並將新項目添加到我們的清單中。

編寫一個名為 removeItem 的 function ,給定兩個 arguments,第一個是myGroceryList ,第二個是要從myGroceryList中刪除的項目。 如果第二個參數(或要添加或刪除的項目)與myGroceryList中的項目匹配,則從您的購物清單中刪除該項目並返回新的、更新的購物清單。

完成此操作后,編寫另一個名為addItem的 function 並給出兩個 arguments,第一個是myGroceryList ,第二個是要添加到您的購物清單的項目。 addItem中,將您傳入的項目添加到myGroceryList ,然后返回新的、更新的購物清單。

在 removeItem 和 addItem 中檢查“myGroceryList”和“item”arguments 是否真實。 如果不是,則返回一個空數組。

以下是調用函數的一些示例以及應返回的內容:

 removeItem(myGroceryList, 'chips') --> ['pizza', 'hotpockets', 'MtnDew', 'corndogs']; addItem(myGroceryList, 'Jerky') --> ['pizza', 'hotpockets', 'MtnDew', 'corndogs', 'Jerky']; removeItem(myGroceryList) --> []; addItem() --> [];

這是我的代碼:

removeItem=(myGroceryList,item)=>{
   return myGroceryList.filter((thing)=>{
      return thing != item
   })
}

addItem=(myGroceryList, item)=>{
   myGroceryList.push(item);
   return myGroceryList;
} 

我怎樣才能讓這最后一步起作用?

只需添加一個if即可驗證 arguments 的真實性:

removeItem=(myGroceryList,item)=>{
   if (!myGroceryList || !item) return [];
   return myGroceryList.filter((thing)=>{
      return thing != item
   })
}

不改變論點

當您被要求返回新列表時,您很好地使用了filter並且沒有改變原始列表。 但是您最好將相同的原則應用於addItem ,它也應該返回新列表,因此最好不要改變給出的列表:

addItem=(myGroceryList, item)=>{
   if (!myGroceryList || !item) return [];
   return myGroceryList.concat(item); // don't use push, but concat
} 

或者……改變論點?

然而,在分配結束時給出的示例代碼,沒有使用 function 的返回值(除了控制台報告它),從第二個調用中我們可以看到“芯片”實際上已經從第一次調用removeItem列表。

所以這意味着你必須讓你的函數有副作用

在這種情況下,您不應該使用filterconcat ,而是將第一個 function 更改為使用splice

removeItem=(myGroceryList,item)=>{
   if (!myGroceryList || !item) return [];
   let i = myGroceryList.indexOf(item);
   if (i >= 0) myGroceryList.splice(i, 1); // mutate the list
   return myGroceryList;
}

...並且您可以將您的版本與push for addItem一起使用:

addItem=(myGroceryList, item)=>{
   if (!myGroceryList || !item) return [];
   myGroceryList.push(item); // mutate...
   return myGroceryList;
} 

您可以檢查是否為假並立即返回一個空數組,而不是檢查是否為真。

   addItem=(myGroceryList, item) => {
      if(!myGroceryList) { return [] }
      myGroceryList.push(item);
      return myGroceryList;
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM