有没有一种方法可以在嵌套对象属性上使用_.omit

我希望这种情况发生:

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显然不存在,只是_.omit不会影响嵌套属性,但是应该清楚我在寻找什么。

它也不必强调,但以我的经验,它通常只会使事情变得更短,更清晰。

最佳答案

您可以创建一个nestedOmit mixin来遍历对象以删除不需要的 key 。就像是

_.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;
    }
});

和一个演示http://jsfiddle.net/nikoshr/fez3eyw8/1/

09-17 02:01