2015-05-27 23 views
6

Tôi có một chuỗi chuỗi và muốn xóa ngay một số chuỗi. Nhưng nó không hoạt độngLoại bỏ Lodash khỏi mảng chuỗi

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

Tôi đoán điều này xảy ra vì hàm _.remove chấp nhận chuỗi làm đối số thứ hai và coi đó là tên thuộc tính. Làm thế nào để làm cho lodash làm một kiểm tra bình đẳng trong trường hợp này?

Trả lời

12

Một lựa chọn hơn cho bạn là sử dụng _.pull, mà không giống như _.without, không tạo ra một bản sao của mảng, nhưng chỉ đổi nó thay vì:

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

tham khảo: https://lodash.com/docs#pull

+0

Chính xác những gì tôi cần, cảm ơn –

1

Hàm _.remove không chấp nhận một chuỗi làm đối số thứ hai nhưng hàm vị ngữ được gọi cho mỗi giá trị trong mảng. Nếu hàm trả về true, giá trị sẽ bị xóa khỏi mảng.

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

Loại bỏ tất cả các yếu tố từ mảng predicate lợi nhuận truthy cho và lợi nhuận một mảng của các yếu tố loại bỏ. Vị từ được liên kết với thisArg và được gọi với ba đối số: (giá trị, chỉ mục, mảng).

Vì vậy, nếu bạn muốn loại bỏ b từ mảng của bạn, bạn nên một cái gì đó như thế này:

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

Giá trị trả về phải là v == 'b', không phải v! == 'b' – trevor

+0

@trevor no. Điều đó sẽ chỉ khớp với 'b'. Chúng tôi muốn đối diện –

+2

Tôi nghĩ họ chỉ muốn xóa 'b' dựa trên nhận xét trong mã của họ: 'b vẫn còn đó' – trevor

2

Như Giuseppe Pes chỉ ra, _.remove dự kiến ​​một hàm. Cách trực tiếp hơn để thực hiện những gì bạn muốn là sử dụng _.without để thay thế, trong đó làm lấy các phần tử cần xóa trực tiếp.

_.without(['a','b','c','d'], 'b'); //['a','c','d'] 
Các vấn đề liên quan