爲什麼在下劃線中沒有超簡單的remove
函數?從下劃線中的數組中刪除值
var arr = [1,2,3,4,5];
_.remove(arr, 5);
當然,我可以使用reject
或without
...但他們都不是破壞性的。我錯過了什麼嗎?
我想我會做的老式方法...
arr.splice(arr.indexOf(5), 1);
唉
爲什麼在下劃線中沒有超簡單的remove
函數?從下劃線中的數組中刪除值
var arr = [1,2,3,4,5];
_.remove(arr, 5);
當然,我可以使用reject
或without
...但他們都不是破壞性的。我錯過了什麼嗎?
我想我會做的老式方法...
arr.splice(arr.indexOf(5), 1);
唉
這是因爲下劃線提供功能性概念的JavaScript,關鍵之一函數式編程的概念是Referential Transparency。
實質上,函數沒有副作用並且將始終返回給定輸入的相同輸出。換句話說,所有功能都是pure。
從陣列中刪除一個元素對於給定的輸入實際上是一個可預測的結果,但結果將是一個副作用而不是返回值。因此,破壞性功能不適合功能範式。
解的正確方法從在下劃線的陣列刪除值已經在長度上堆棧溢出here討論。作爲附註,當使用without
,reject
或filter
時,如果您只想從數組中移除一個項目的單個實例,則需要唯一標識它。因此,以這種方式:
arr = _.without(arr, 5);
你會從arr
刪除的5
所有實例。
這將刪除每個實例5在陣中... – AaronF
@AaronF好的。我已經更新了我的答案,以提出此功能。 –
所以你需要修改原來的,對吧? –
[從javascript中的對象數組中刪除項目]的可能重複(http://stackoverflow.com/questions/16994212/remove-item-from-array-of-objects-in-javascript) – Bergi