Lodash工具库Object学习

    技术2022-07-11  89

    Object

    一、Object1 _.at(object, [paths])2_.defaults(object, [sources])3_.findKey(object, [predicate=_.identity])4_.has(object, path)5_.setWith(object, path, value, [customizer])6_.invert(object)7_.mapKeys(object, [iteratee=_.identity])8_.merge(object, [sources])9_.omit(object, [props])10_.pick(object, [props])11_.result(object, path, [defaultValue])12_.toPairs(object)13_.unset(object, path)14_.update(object, path, updater)15_.updateWith(object, path, updater, [customizer])

    一、Object

    1 _.at(object, [paths])

    创建一个数组,值来自 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);

    2_.defaults(object, [sources])

    分配来源对象的可枚举属性到目标对象所有解析为 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);

    3_.findKey(object, [predicate=_.identity])

    这个方法类似 _.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

    4_.has(object, path)

    检查 path 是否是object对象的直接属性。

    var obj1 = { 'a': { 'b': 2 } }; console.log(_.has(obj1, 'a'),_.has(obj1, 'b'));//true false

    5_.setWith(object, path, value, [customizer])

    这个方法类似_.set,除了它接受一个 customizer,调用生成对象的 path。 如果 customizer 返回 undefined 将会有它的处理方法代替。 customizer 调用3个参数: (nsValue, key, nsObject)。

    var obj2 = {}; var setWith = _.setWith(obj2, '[0][1]', 'a', Object); console.log(setWith);

    6_.invert(object)

    创建一个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]

    7_.mapKeys(object, [iteratee=_.identity])

    反向版 _.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)。

    8_.merge(object, [sources])

    该方法类似_.assign, 除了它递归合并 sources 来源对象自身和继承的可枚举属性到 object 目标对象。如果目标值存在,被解析为undefined的sources 来源对象属性将被跳过。数组和普通对象会递归合并,其他对象和值会被直接分配覆盖。源对象从从左到右分配。后续的来源对象属性会覆盖之前分配的属性。

    var a = { 'a': [{ 'b': 2 }, { 'd': 4 }] }; var b = { 'a': [{ 'c': 3 }, { 'e': 5 }] }; console.log(_.merge(a, b));

    9_.omit(object, [props])

    反向版 _.pick; 这个方法一个对象,这个对象由忽略属性之外的object自身和继承的可枚举属性组成。(愚人码头注:可以理解为删除object对象的属性)。

    var omit = { 'a': 1, 'b': '2', 'c': 3 }; console.log(_.omit(omit, ['a', 'c']));//'b':2

    10_.pick(object, [props])

    创建一个从 object 中选中的属性的对象。

    var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pick(object, ['a', 'c']);//{ 'a': 1, 'c': 3 }

    11_.result(object, path, [defaultValue])

    这个方法类似 _.get, 除了如果解析到的值是一个函数的话,就绑定 this 到这个函数并返回执行后的结果。

    var result = { 'a':18, 'b':function(){ console.log(this.a); } } console.log(_.result(result,'a'));//a _.result(result,'b');//会直接执行b

    12_.toPairs(object)

    创建一个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));

    13_.unset(object, path)

    移除object对象 path 路径上的属性。

    var object = { 'a': [{ 'b': { 'c': 7 } }] }; console.log(_.unset(object, 'a[0].b.c'));//true console.log(object);//{ 'a': [{ 'b': {} }] };

    14_.update(object, path, updater)

    该方法类似_.set,除了接受updater以生成要设置的值。使用 _.updateWith来自定义生成的新path。updater调用1个参数:(value)。

    var object = { 'a': 10}; _.update(object, 'a', function(n) { return n * n; });//10*10

    15_.updateWith(object, path, updater, [customizer])

    该方法类似_.update,不同之处在于它接受customizer,调用来生成新的对象的path。如果customizer返回undefined,路径创建由该方法代替。customizer调用有三个参数:(nsValue, key, nsObject) 。

    var object = {}; _.updateWith(object, '[0][1]', _.constant('a'), Object);//Array,和setWith类似
    Processed: 0.013, SQL: 9