2015-05-12 22 views
5

Có cách nào để sử dụng _.omit trên thuộc tính lồng nhau không?Đối tượng: Bỏ qua sâu

Tôi muốn điều này xảy ra:

schema = { 
    firstName: { 
    type: String 
    }, 
    secret: { 
    type: String, 
    optional: true, 
    private: true 
    } 
}; 

schema = _.nestedOmit(schema, 'private'); 

console.log(schema); 
// Should Log 
// { 
// firstName: { 
//  type: String 
// }, 
// secret: { 
//  type: String, 
//  optional: true 
// } 
// } 

_.nestedOmit rõ ràng là không tồn tại và chỉ _.omit không ảnh hưởng đến tính chất lồng nhau, nhưng nó phải được rõ ràng những gì tôi đang tìm kiếm.

Nó cũng không phải là gạch dưới, nhưng theo kinh nghiệm của tôi, nó thường chỉ làm cho mọi thứ ngắn hơn và rõ ràng hơn.

+0

sẽ làm tổ được tùy ý hay chỉ là một cấp? – thefourtheye

+0

Sẽ tùy ý. – zimt28

Trả lời

7

Bạn có thể tạo hỗn hợp nestedOmit để di chuyển đối tượng để xóa khóa không mong muốn. Một cái gì đó như

_.mixin({ 
    nestedOmit: function(obj, iteratee, context) { 
     // basic _.omit on the current object 
     var r = _.omit(obj, iteratee, context); 

     //transform the children objects 
     _.each(r, function(val, key) { 
      if (typeof(val) === "object") 
       r[key] = _.nestedOmit(val, iteratee, context); 
     }); 

     return r; 
    } 
}); 

và một bản demo http://jsfiddle.net/nikoshr/fez3eyw8/1/

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