深拷贝deepClone:
var obj = {name: 'David',list: {age: 33}};var d = _.deepClone(obj);console.log(d);console.log(d.list === obj.list);
_.deepClone = function(obj){//只支持array和objectif (_.isArray(obj)) {return _.map(obj, function(elem){// 递归调用return _.isArray(elem) || _.isObject(elem) ? _.deepClone(elem) : elem;});}else if (_.isObject(obj)) {return _.reduce(obj, function(memo, value, key){memo[key] = _.isArray(value) || _.isObject(value) ? _.deepClone(value) : value;return memo;}, {});}return obj;};
白名单:
var d1 = _.pick({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age');console.log(d1);var d2 = _.pick({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object) {return _.isNumber(value);});console.log(d2);
// 白名单_.pick = function(object, ointeratee, context) {var interatee, keys, target = {};if (!_.isObject(object)) {return object;}if (_.isFunction(ointeratee)) {keys = _.allKeys(object);interatee = optimizeCb(ointeratee, context);}else {keys = [].slice.call(arguments, 1);interatee = function(value, key, object) {return key in object;};}for (var i=0, len = keys.length; i < len; i++) {var key = keys[i];if (interatee(object[key], key, object)) {target[key] = object[key];}}return target;}
Note:
可以使用key in object来判断 object 上有没有属性key。
var d = {name: 'moe', age: 50, userid: 'moe1'};console.log('name' in d); // trueconsole.log('age' in d); // trueconsole.log('gender' in d);// false
