作者:Soaring_Tiger 转载请注明出处 http://blog.csdn.net/Soaring_Tiger
前情提要1 : lodash中文学习拾零之Array篇
前情提要2:lodash 中文学习拾零之 Chain篇
前情提要3:lodash 中文学习拾零之 Collection篇
4. 处理哪些Object?
lodash的Object方法处理的是:function, array, string, JSON
4.1 判断Object类型
lodash提供了一系列用于判断Obejct类型的方法,称为 variadic functions:
_.isString
_.isArray
_.isTypedArray
_.isNumber
_.isBoolean
_.isDate
_.isPlainObject
_.isRegExp
_.isFunction
_.isObject
_.isPlainObject
_.isFinite
_.isElement
_.isNative
_.isUndefined
_.isNull
_.isNaN
//例如下面这个 _.isString用来判断输入的参数是否是String类型
function hello(name) {
if (_.isString(name)) {
return 'hello, ' + name;
}
}
hello('world');
// → "hello, world"
hello();
// → undefined
//判断是否是函数的参数
_.isArguments(function() {
return arguments; }());
// → true
_.isArguments([1, 2, 3]);
// → false
//判断是否语言意义上的Object:
//(e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))
_.isObject({});
// → true
_.isObject([1, 2, 3]);
// → true
_.isObject(1);
// → false
//判断是否 plain object
function Foo() {
this.a = 1;
}
_.isPlainObject(new Foo);
// → false
_.isPlainObject({a:1});
// → true
4.2 赋值与取值(Assigning and accessing properties)
创建一个javascript object对象并对之赋值是个常见工作,其中有些过程挺无聊的,比如:把一个对象的部分数据搞到另一个里去、或者必须确保为新对象填充默认值、确定是否存在某个key并且准确的赋值……
不用慌,对于上述等等无聊的事情,lodash提供了一系列工具来让你轻松完成。
4.2.1 扩展对象(Extending objects)
4.2.1.1 _.assign(object, [sources], [customizer], [thisArg])
注意[sources]这个参数,理论上可以是无限多,缺省情况下,后面的同名Key:Value对会覆盖前面的值。
的返回值一定是个Object
var object = {
name: '汤姆',
age: 42
};
_.assign(object, {occupation: '程序猿'},{
'name':'杰瑞'});
//注意,此处新的 name:'杰瑞' 覆盖了原有的数据 '汤姆'
// →
// {
// name: "杰瑞",
// age: 42,
// occupation: "程序猿"
// }
// 设计自定义的回调函数
var defaults = _.partialRight(_.assign, function(value, other) {
return _.isUndefined(value) ? other : value;
});
defaults(object, { 'language': 'JS' }, { 'name': '果菲' });
// 原来没有的属性language及其值被添加了上去,而'name'的值还是保持不变
// → {
// 'name': '杰瑞',
// 'age': 42,
// 'occupation':'程序猿',
// 'language':'JS'
// }
4.2.1.2 _.merge(object, [sources], [customizer], [thisArg])
采用递归的方式将sources objects合并到目标Object当中,后面的相同属性会覆盖前面的相同属性。
_.merge (合并器)的
第一个参数是目标Object
第二个参数是源Object(即要合并进来的内容)
第三个参数是自定义处理器并接受五个参数(objectValue, sourceValue, key, object, source)
.merge的返回值一定是个Object
var users = {
'data': [{ 'user': '钱夫人' }, { 'user': '阿土伯' }]
};