lodash 常用总结

_.merge  合并源对象的属性到目标对象中

merge(object, [sources])

 merge 遇到相同属性的时候,如果属性值为纯对象(plain object)或者集合(collection)时,不是用后面的属性值去覆盖前面的属性值,而是会把前后两个属性值合并。
如果源对象的属性值为 undefined,则会忽略该属性。

merge({},{ a: 1 },{ b: { c: 2, d: 3} },{ b: { e: 4 } })

//结果

{ a: 1, b: { c: 2, d: 3, e: 4 } }

------------------------------------------------

/ 合并集合

var users = {

'data': [{ 'user': 'barney' }, { 'user': 'fred' }]

};

var ages = {

'data': [{ 'age': 36 }, { 'age': 40 }]

};

merge({}, users, ages)

// { data: [ { user: 'barney', age: 36 }, { user: 'fred', age: 40 } ] }

// merge 函数会修改原来的对象!

merge(users, ages)

console.log(users) // { data: [ { user: 'barney', age: 36 }, { user: 'fred', age: 40 } ]

 

assign 、extend、merge 

相同之处

  • 都可以用来合并对象
  • 都会修改原来的对象 (如果原来的对象是作为函数的第一个参数的话)

不同之处

  • assign 函数不会处理原型链上的属性,也不会合并相同的属性,而是用后面的属性值覆盖前面的属性值

  • extend

    • 3.x 版本中和 assign 一样
    • 4.x 版本中会合并原型链上的属性
  • merge 遇到相同属性名的时候,如果属性值是纯对象或集合的时候,会合并属性值

 

_.uniqueId

生成唯一的Id,参数[ prefix='' ]是可选的,可在ID前面添加前缀。

_.uniqueId('count_')

//'count_104'

_.uniqueId()// =>'105'

 

_.uniqBy 从数组中删除重复项
[
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello-how-are-you',
        id: "23"    
    },
    {
        url: 'www.example.com/i-like-cats',
        id: "24"    
    },
    {
        url: 'www.example.com/i-like-pie',
        id: "25"    
    }
]
_.uniqBy(data, 'id');

假设数据应该是唯一的,id并且数据存储在data变量中,那么可以使用uniq()函数,如下所示:

_.uniq(data, function (e) {
  return e.id;
});

或者直接这样:

_.uniq(data, 'id');

版权声明:本文为qq_25103439原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。