2015-05-27 301 views
6

我有一個字符串數組,想立即刪除其中的一部分。但是,這是行不通的Lodash從字符串數組中刪除

var list = ['a', 'b', 'c', 'd'] 
_.remove(list, 'b'); 
console.log(list); // 'b' still there 

我猜它的發生是因爲_.remove函數接受字符串作爲第二個參數,並認爲是屬性名。如何使lodash在這種情況下做平等檢查?

回答

12

爲您多一個選擇是使用_.pull,它不像_.without,不創建數組的副本,但只能修改它來代替:

_.pull(list, 'b'); // ['a', 'c', 'd'] 

參考:https://lodash.com/docs#pull

+0

正是我需要的,謝謝 –

1

函數_.remove不接受字符串作爲第二個參數,而是爲數組中的每個值調用一個謂詞函數。如果函數返回true,則該值將從數組中移除。

Lodas DOC:https://lodash.com/docs#remove

移除從陣列謂詞返回truthy並 返回所移除的元件的陣列的所有元素。該謂詞綁定到 thisArg並用三個參數調用:(value,index,array)。

所以,如果你想從你的數組中刪除b你應該是這樣的:

var list = ['a', 'b', 'c', 'd'] 
_.remove(list, function(v) { return v === 'b'; }); 
["a", "c", "d"] 
+0

返回值應該是v =='b',而不是v!=='b' – trevor

+0

@trevor no。那隻會匹配'b'。我們想要相反 –

+2

我認爲他們只是想根據代碼中的評論刪除'b':'b still there' – trevor

2

由於朱塞佩瘟指出,_.remove期待的功能。更直接的做法是使用_.without而不是將元素直接刪除。

_.without(['a','b','c','d'], 'b'); //['a','c','d']