2013-08-21 19 views
4

爲什麼在下劃線中沒有超簡單的remove函數?從下劃線中的數組中刪除值

var arr = [1,2,3,4,5]; 
_.remove(arr, 5); 

當然,我可以使用rejectwithout ...但他們都不是破壞性的。我錯過了什麼嗎?

我想我會做的老式方法...

arr.splice(arr.indexOf(5), 1); 

+0

所以你需要修改原來的,對吧? –

+0

[從javascript中的對象數組中刪除項目]的可能重複(http://stackoverflow.com/questions/16994212/remove-item-from-array-of-objects-in-javascript) – Bergi

回答

12

說明

這是因爲下劃線提供功能性概念的JavaScript,關鍵之一函數式編程的概念是Referential Transparency

實質上,函數沒有副作用並且將始終返回給定輸入的相同輸出。換句話說,所有功能都是pure

從陣列中刪除一個元素對於給定的輸入實際上是一個可預測的結果,但結果將是一個副作用而不是返回值。因此,破壞性功能不適合功能範式。

的正確方法從在下劃線的陣列刪除值已經在長度上堆棧溢出here討論。作爲附註,當使用without,rejectfilter時,如果您只想從數組中移除一個項目的單個實例,則需要唯一標識它。因此,以這種方式:

arr = _.without(arr, 5); 

你會從arr刪除5所有實例。

+1

這將刪除每個實例5在陣中... – AaronF

+0

@AaronF好的。我已經更新了我的答案,以提出此​​功能。 –