创建一个数组,值来自 object 的paths路径相应的值。
var obj = { 'a': [{ 'b': { 'c': 3 } }, 4] }; var at = _.at(obj,['a[0].b.c']);//obj.a[0].b.c console.log(at);分配来源对象的可枚举属性到目标对象所有解析为 undefined 的属性上。 来源对象从左到右应用。 一旦设置了相同属性的值,后续的将被忽略掉。 _.assign(object, [sources]) 分配来源对象的可枚举属性到目标对象上。 来源对象的应用规则是从左到右,随后的下一个对象的属性会覆盖上一个对象的属性。
var defaults = _.defaults({'a':18},{'b':19},{'a':20});//前面覆盖后面 var assign = _.assign({'a':18},{'b':19},{'a':20});//后面覆盖前面 console.log(defaults,assign);这个方法类似 _.find 。 除了它返回最先被 predicate 判断为真值的元素 key,而不是元素本身。
var users = {'barney': { 'age': 36, 'active': true }, 'fred': { 'age': 40, 'active': false }}; var findKey = _.findKey(users, { 'age': 40, 'active': false }); console.log(findKey);//fred检查 path 是否是object对象的直接属性。
var obj1 = { 'a': { 'b': 2 } }; console.log(_.has(obj1, 'a'),_.has(obj1, 'b'));//true false这个方法类似_.set,除了它接受一个 customizer,调用生成对象的 path。 如果 customizer 返回 undefined 将会有它的处理方法代替。 customizer 调用3个参数: (nsValue, key, nsObject)。
var obj2 = {}; var setWith = _.setWith(obj2, '[0][1]', 'a', Object); console.log(setWith);创建一个object键值倒置后的对象。 如果 object 有重复的值,后面的值会覆盖前面的值。
var object = { 'a': 1, 'b': 2, 'c': 1 }; _.invert(object);//{ '1': 'c', '2': 'b' }重复的会覆盖前面##_.invoke(object, path, [args]) 调用object对象path上的方法。
var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; _.invoke(object, 'a[0].b.c.slice', 1, 3);//[2, 3]反向版 _.mapValues。 这个方法创建一个对象,对象的值与object相同,并且 key 是通过 iteratee 运行 object 中每个自身可枚举属性名字符串 产生的。iteratee调用三个参数: (value, key, object)。
_.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { return key + value; });//{ 'a1': 1, 'b2': 2 }.mapValues(object, [iteratee=.identity]) 创建一个对象,这个对象的key与object对象相同,值是通过 iteratee 运行 object 中每个自身可枚举属性名字符串产生的。 iteratee调用三个参数: (value, key, object)。
该方法类似_.assign, 除了它递归合并 sources 来源对象自身和继承的可枚举属性到 object 目标对象。如果目标值存在,被解析为undefined的sources 来源对象属性将被跳过。数组和普通对象会递归合并,其他对象和值会被直接分配覆盖。源对象从从左到右分配。后续的来源对象属性会覆盖之前分配的属性。
var a = { 'a': [{ 'b': 2 }, { 'd': 4 }] }; var b = { 'a': [{ 'c': 3 }, { 'e': 5 }] }; console.log(_.merge(a, b));反向版 _.pick; 这个方法一个对象,这个对象由忽略属性之外的object自身和继承的可枚举属性组成。(愚人码头注:可以理解为删除object对象的属性)。
var omit = { 'a': 1, 'b': '2', 'c': 3 }; console.log(_.omit(omit, ['a', 'c']));//'b':2创建一个从 object 中选中的属性的对象。
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pick(object, ['a', 'c']);//{ 'a': 1, 'c': 3 }这个方法类似 _.get, 除了如果解析到的值是一个函数的话,就绑定 this 到这个函数并返回执行后的结果。
var result = { 'a':18, 'b':function(){ console.log(this.a); } } console.log(_.result(result,'a'));//a _.result(result,'b');//会直接执行b创建一个object对象自身可枚举属性的键值对数组。这个数组可以通过_.fromPairs撤回。如果object 是 map 或 set,返回其条目。
function Foo() { this.a = 1; this.b = 2; } Foo.prototype.c = 3; console.log(_.toPairs(new Foo)); console.log(_.toPairsIn(new Foo));移除object对象 path 路径上的属性。
var object = { 'a': [{ 'b': { 'c': 7 } }] }; console.log(_.unset(object, 'a[0].b.c'));//true console.log(object);//{ 'a': [{ 'b': {} }] };该方法类似_.set,除了接受updater以生成要设置的值。使用 _.updateWith来自定义生成的新path。updater调用1个参数:(value)。
var object = { 'a': 10}; _.update(object, 'a', function(n) { return n * n; });//10*10该方法类似_.update,不同之处在于它接受customizer,调用来生成新的对象的path。如果customizer返回undefined,路径创建由该方法代替。customizer调用有三个参数:(nsValue, key, nsObject) 。
var object = {}; _.updateWith(object, '[0][1]', _.constant('a'), Object);//Array,和setWith类似