2017-12-12 99 views
5

Tôi đã xem tài liệu lodash filter và không rõ liệu thông số thứ ba có phải là ngữ cảnh hay không.Chức năng lọc của lodash có lấy bối cảnh không?

Tôi đang sử dụng plugin cytoscape (dagre) và dường như vượt qua this làm đối số 3. Khi tôi tạm dừng thực thi trước khi phương thức lọc được gọi, this được xác định. Nhưng trong cuộc gọi this là không xác định.

Tôi đã xem tài liệu underscore filter và dường như lấy một đối số thứ ba làm ngữ cảnh. Vì vậy, tôi kinda đoán rằng các plugin ban đầu được sử dụng gạch dưới sau đó có thể thay đổi để lodash. Dự án tôi đang làm là sử dụng lodash.

Tôi không thể hiểu tại sao this không có giá trị tại thời điểm đó. Nó có thể là dự án cụ thể nhưng tôi chỉ muốn được rõ ràng về tham số thứ ba của bộ lọc của lodash.

Định nghĩa bộ lọc của lodash có giống hệt như bộ lọc của gạch dưới không? Nó không có vẻ như vậy từ tài liệu.

+0

Tham số thứ ba, không có thông số thứ 3 về phương pháp 'lọc' lodash. –

+0

@chsdk Yeah ... Tôi đã nghĩ bạn có thể thay thế gạch dưới bằng lodash. Nhưng gạch dưới có thể lấy một tham số thứ ba trong khi lodash thì không. – Touch

+2

Lodash 3 'filter' có tham số ngữ cảnh thứ ba. Nó được gỡ bỏ trong Lodash 4. – Tushar

Trả lời

2

Thật không may là lodash filter method, không giống như underscore filter method, không cung cấp một lựa chọn cho một cuộc tranh luận context, vì nó chỉ mất hai đối số:

Arguments

  • colle ction (Array | Object): Bộ sưu tập để lặp lại.
  • [predicate = _. Identity] (Hàm): Hàm được gọi cho mỗi lần lặp.

gì bạn có thể làm là sử dụng .bind() method để ràng buộc các hàm callback để mong muốn context đối tượng, như thế này:

_.filter(array, callback.bind(context)); 

Lưu ý:

Lưu ý rằng Javascript có riêng của mình Array#filter() method đã cung cấp tùy chọn này.

3

Bạn luôn có thể xác định ngữ cảnh của riêng mình bằng cách sử dụng Function.prototype.bind.

_.filter([…], 
    function (o) { 
    console.log(this.id); //100 
    //than return something based on o 
    return o.active 
    }.bind({id: 100}) 
); 

Doc on mdn

+0

Bạn cũng có thể chấp nhận câu trả lời. Lên bầu chọn nó. Chọn cái kia bởi vì nó nói về thực tế rằng phương pháp lọc của lodash khác với phương pháp trong gạch dưới. Nhưng cảm ơn câu trả lời. Cảm kích điều đó :-) – Touch

Các vấn đề liên quan