最近搬砖的时候总觉得自己对一些数组和对象的方法了解不够透彻,所以连着一些lodash的方法放在一起做个比较和总结
Array
元素的添加与删除
▶ posh & pop 数组的栈方法,在数组的末端增加和删除一个元素
1 | let a = [1, 2, 3] |
▶ shift & unshift 数组的队列方法,在数组的第一个位置增加和删除一个元素
1 | let a = [1, 2, 3] |
▶ splice 用于删除原数组的一部分元素,可以在被删除的位置加入新元素,会改变原数组
1 | let a = [1, 2, 3, 4] |
数组的分割与合并
▶ slice 用于提取数组的某个部分,参数是开始位置与结束位置
1 | let a = [1, 2, 3, 4] |
▶ concat 用于多个数组的合并,返回新数组,不会改变原数组;同时也可以用于对象的合并。
1 | let a = [1, [2]] |
排序
▶ sort 对元素进行排序,会改变原数组
1 | let a = [1, 3, 2, 4] |
▶ reverse 颠倒元素的顺序,会改变原数组
1 | let a = [3, 2, 1, 4] |
遍历
▶ forEach 遍历,参数分别是当前元素、当前位置和整个数组
1 | [1, 2, 3].forEach((item, index, array) => { |
▶ map 遍历,参数分别是当前元素、当前位置和整个数组
1 | [1, 2, 3].map((item, index, array) => { |
▶ filter 过滤数据,遍历数据查找符合输入函数条件的元素,返回一个新的数组
1 | [1, 2, 3, 4, 5].filter((item) => { |
▶ some & every 断言,判断数组的每个元素是否符合某条件,返回布尔值
1 | [1, 2, 3, 4].some((item, index, array) => { |
▶ reduce & reduceRight 接受函数作为累加器,让每个值最终合成一个值
1 | [1, 2, 3].reduce((acc, cur, idx, src) => { |
查找元素
▶ indexOf 查找某元素的索引,不存在返回-1
1 | [1, 3, 5].indexOf(5) // 2 |
▶ find & findIndex 查找满足条件的元素,返回第一个符合条件的元素,未找到返回undefined
,findIndex返回的是索引
1 | [1, 3, 5].find((item, index, array) => { |
▶ includes 判断当前数组是否包含某指定的值,返回布尔值
1 | ['a', 'b', 'c'].includes('a') // true |
字符串相关
▶ join 输入指定分隔符将数组拼成一个字符串
1 | ['a', 'b', 'c'].join(',') // a,b,c |
▶ toString 将数组转换为字符串,间隔符为逗号
1 | ['a', 'b', 'c'].toString() // a,b,c |
其他
▶ from 从一个类似数组或可迭代对象中创建一个新的数组实例(ES6)
1 | Array.from([1, 2, 3], x => x + x) // [2, 4, 6] |
▶ copyWithin 将当前数组内部制定位置的成员复制到其他位置,返回当前新数组,原数组改变。接收三个参数【从该位置开始替换|从该位置开始读取数据|到该位置停止读取数据】(ES6)
1 | [1, 2, 3, 4, 5].copyWithin(0, 3) // [4, 5, 3, 4, 5] |
▶ fill 用给定的值填充一个数组(ES6)
1 | ['a', 'b', 'c'].fill(7) // [7, 7, 7] |
Objcet
▶ Object.assign 合并对象,合并时含有相同属性则后者覆盖前者,会改变目标对象
1 | Object.assign({a: 1, b: 2}, {b: 3, c: 4}) |
▶ Object.is 用来判断两个值是否是同一个值
1 | Object.is('haorooms', 'haorooms'); // true |
▶ Object.keys 回一个由给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in
循环遍历该对象时返回的顺序一致
1 | let obj = {a: 1, b: 2} |
Lodash
由于lodash的方法实在是太多了,只提一下最最最常用的merge
,用于两个对象的合并,可以实现深拷贝,但是在合并数组的时候有一个坑
1 | let a = { |
由于是深拷贝,合并时数组会把两个对象的数组合并到一起,区别于Object.assign()
,但是有的时候确实必须用深拷贝,又要去后一个数组覆盖目标数组,那么在合并之前就必须先移除掉目标对象中的这个属性
1 | lodash.merge(lodash.omit(a, ['tag']), b) |