Lodash——数组Array(二)

目录

1._.slice(array, [start=0], [end=array.length])——裁剪数组array,从 start 位置开始到end结束,但不包括 end 本身的位置。

2._.sortedIndex(array, value)——使用二进制的方式检索来决定 value值应该插入到数组中尽可能小的索引位置,以保证array的排序。

3._.sortedIndexBy(array, value, [iteratee=_.identity])——这个方法类似 _.sortedIndex ,除了它接受一个 iteratee (迭代函数),调用每一个数组(array)元素,返回结果和value 值比较来计算排序。iteratee 会传入一个参数:(value)。

4. _.sortedIndexOf(array, value)——这个方法类似 _.indexOf,除了它是在已经排序的数组array上执行二进制检索。

5._.sortedLastIndex(array, value)——此方法类似于_.sortedIndex,除了 它返回 value值 在 array 中尽可能大的索引位置(index)。

6._.sortedLastIndexBy(array, value, [iteratee=_.identity])——类似 _.sortedLastIndex ,除了它接受一个 iteratee (迭代函数),调用每一个数组(array)元素,返回结果和value 值比较来计算排序。iteratee 会传入一个参数:(value)。

7._.sortedLastIndexOf(array, value)——类似 _.lastIndexOf,除了它是在已经排序的数组array上执行二进制检索。

 8._.sortedUniq(array)——个方法类似 _.uniq,除了它会优化排序数组,返回一个新的不重复的数组。

9._.sortedUniqBy(array, [iteratee])——这个方法类似 _.uniqBy,除了它会优化排序数组

10._.tail(array)——获取除了array数组第一个元素以外的全部元素。

11._.take(array, [n=1])——从array数组的起始元素开始提取n个元素。

12._.takeRight(array, [n=1])——从array数组的最后一个元素开始提取n个元素。

13._.takeRightWhile(array, [predicate=_.identity])——从array数组的最后一个元素开始提取元素,直到 predicate 返回假值。

14._.takeWhile(array, [predicate=_.identity])——从array数组的起始元素开始提取元素,,直到 predicate 返回假值。

15._.union([arrays])——创建一个按顺序排列的唯一值的数组。所有给定数组的元素值使用SameValueZero做等值比较。(注: arrays(数组)的并集,按顺序返回,返回数组的元素是唯一的)

16._.unionBy([arrays], [iteratee=_.identity])——这个方法类似 _.union ,除了它接受一个 iteratee (迭代函数),调用每一个数组(array)的每个元素以产生唯一性计算的标准。iteratee 会传入一个参数:(value)。

17._.unionWith([arrays], [comparator])——这个方法类似 _.union, 除了它接受一个 comparator 调用比较arrays数组的每一个元素。 comparator 调用时会传入2个参数: (arrVal, othVal)。

18._.uniq(array)——创建一个去重后的array数组副本。只有第一次出现的元素才会被保留。

19._.uniqBy(array, [iteratee=_.identity])——这个方法类似 _.uniq ,除了它接受一个 iteratee (迭代函数),调用每一个数组(array)的每个元素以产生唯一性计算的标准。iteratee 调用时会传入一个参数:(value)。

20._.uniqWith(array, [comparator])——这个方法类似 _.uniq, 除了它接受一个 comparator 调用比较arrays数组的每一个元素。 comparator 调用时会传入2个参数: (arrVal, othVal)。

21._.zip([arrays])——创建一个分组元素的数组,数组的第一个元素包含所有给定数组的第一个元素,数组的第二个元素包含所有给定数组的第二个元素,以此类推。

22._.unzip(array)——这个方法类似于_.zip,除了它接收分组元素的数组,并且创建一个数组,分组元素到打包前的结构。(:返回数组的第一个元素包含所有的输入数组的第一元素,第一个元素包含了所有的输入数组的第二元素,依此类推。)

23._.zipObject([props=[]], [values=[]])——这个方法类似 _.fromPairs,除了它接受2个数组,第一个数组中的值作为属性标识符(属性名),第二个数组中的值作为相应的属性值。

24._.zipObjectDeep([props=[]], [values=[]])——这个方法类似 _.zipObject,除了它支持属性路径。

25._.zipWith([arrays], [iteratee=_.identity])——这个方法类似于_.zip,不同之处在于它接受一个 iteratee(迭代函数),来 指定分组的值应该如何被组合。 该iteratee调用每个组的元素: (...group).

26._.unzipWith(array, [iteratee=_.identity])——此方法类似于_.unzip,除了它接受一个iteratee指定重组值应该如何被组合。iteratee 调用时会传入每个分组的值: (...group)。

27._.without(array, [values])——创建一个剔除所有给定值的新数组,剔除值的时候,使用SameValueZero做相等比较。

28._.xor([arrays])——创建一个给定数组唯一值的数组,使用symmetric difference做等值比较。返回值的顺序取决于他们数组的出现顺序。

29._.xorBy([arrays], [iteratee=_.identity])——这个方法类似 _.xor ,除了它接受 iteratee(迭代器),这个迭代器 调用每一个 arrays(数组)的每一个值,以生成比较的新值。iteratee 调用一个参数: (value).

30._.xorWith([arrays], [comparator])——该方法是像 _.xor,除了它接受一个 comparator ,以调用比较数组的元素。 comparator 调用2个参数:(arrVal, othVal).

注意事项


1._.slice(array, [start=0], [end=array.length])——裁剪数组array,从 start 位置开始到end结束,但不包括 end 本身的位置。

let array = [1, 2, 3, 4, 5, 6];
console.log(_.slice(array, 3, 4)); //[ 4 ]
console.log(array); //[ 1, 2, 3, 4, 5, 6 ]
  • 不改变原数组。

2._.sortedIndex(array, value)——使用二进制的方式检索来决定 value值应该插入到数组中尽可能小的索引位置,以保证array的排序。

let array = [1, 2, 4];
console.log(_.sortedIndex(array, 3)); //2
console.log(_.sortedIndex(array, 2)); //1
console.log(array); //[ 1, 2, 4 ]

3._.sortedIndexBy(array, value, [iteratee=_.identity])——这个方法类似 _.sortedIndex ,除了它接受一个 iteratee (迭代函数),调用每一个数组(array)元素,返回结果和value 值比较来计算排序。iteratee 会传入一个参数:(value)

let array = [1, 2, 3, 4, 6, 8];
console.log(_.sortedIndexBy(array, 5, item => item > 1));//1
console.log(_.sortedIndexBy(array, 5, item => item > 2));//2
console.log(_.sortedIndexBy(array, 5, item => item > 3));//3

4. _.sortedIndexOf(array, value)——这个方法类似 _.indexOf,除了它是在已经排序的数组array上执行二进制检索。

console.log(_.sortedIndexOf([2, 1, 4, 3], 1)); //-1
console.log(_.sortedIndexOf([1, 2, 3, 4], 1)); //0
  • 不改变原数组。
  • array的数组一定是排序过后的,否则结果都是为-1.

5._.sortedLastIndex(array, value)——此方法类似于_.sortedIndex,除了 它返回 value值 在 array 中尽可能大的索引位置(index)。

let array = [1, 2, 2, 2, 3, 4];
console.log(_.sortedLastIndex(array, 2)); //4

6._.sortedLastIndexBy(array, value, [iteratee=_.identity])——类似 _.sortedLastIndex ,除了它接受一个 iteratee (迭代函数),调用每一个数组(array)元素,返回结果和value 值比较来计算排序。iteratee 会传入一个参数:(value)

let array = [1, 2, 3, 3, 3, 4, 5];
console.log(_.sortedIndexBy(array, 3, item => item > 1)); //1
console.log(_.sortedIndexBy(array, 3, item => item > 2)); //2
console.log(_.sortedIndexBy(array, 3, item => item > 3)); //0

7._.sortedLastIndexOf(array, value)——类似 _.lastIndexOf,除了它是在已经排序的数组array上执行二进制检索。

let array = [1, 2, 3, 3, 3, 4, 5];
console.log(_.sortedLastIndexOf(array, 3)); //4

 8._.sortedUniq(array)——个方法类似 _.uniq,除了它会优化排序数组,返回一个新的不重复的数组。

let array = [1, 3, 1, 2, 4, 3, 5];
console.log(_.sortedUniq(array)); // [1,3,1,2,4,3,5]
console.log(array); //[1, 3, 1, 2, 4, 3, 5]
let array1 = [1, 1, 2, 2, 3, 4, 5];
console.log(_.sortedUniq(array1)); //[ 1, 2, 3, 4, 5 ]
console.log(array1); //[1, 1, 2, 2, 3, 4, 5]
  • 不改变原数组。
  • 数组一定是排序的才有效。

9._.sortedUniqBy(array, [iteratee])——这个方法类似 _.uniqBy,除了它会优化排序数组

console.log(_.sortedUniqBy([1.2, 2.1, 2.9, 3.7, 3.3, 4, 5], Math.floor));
//[ 1.2, 2.1, 3.7, 4, 5 ]

10._.tail(array)——获取除了array数组第一个元素以外的全部元素。

let array = [1, 2, 3, 4];
console.log(_.tail(array)); //[ 2, 3, 4 ]
console.log(array);  //[1, 2, 3, 4]

11._.take(array, [n=1])——array数组的起始元素开始提取n个元素。

let array = [1, 2, 3, 4, 5, 6, 7];
console.log(_.take(array)); //[ 1 ]
console.log(_.take(array, 2)); //[ 1, 2 ]
console.log(_.take(array, 0)); //[]
console.log(_.take(array, 9)); //[1, 2, 3, 4, 5, 6, 7]

12._.takeRight(array, [n=1])——array数组的最后一个元素开始提取n个元素。

let array = [1, 2, 3, 4, 5, 6];
console.log(_.takeRight(array)); //[ 6 ]
console.log(_.takeRight(array, 2)); //[ 5, 6 ]
console.log(_.takeRight(array, 0)); //[]
console.log(_.takeRight(array, 9)); //[ 1, 2, 3, 4, 5, 6 ]

13._.takeRightWhile(array, [predicate=_.identity])——array数组的最后一个元素开始提取元素,直到 predicate 返回假值。

let array = [{"name":"mandy"},{"age":18} ];
console.log(_.takeRightWhile(array,  item => item.age >10)); //[ { age: 18 } ]
console.log(_.takeRightWhile(array,  item => item.age > 19)); //[]

14._.takeWhile(array, [predicate=_.identity])——array数组的起始元素开始提取元素,,直到 predicate 返回假值。

let array = [{ "name": "mandy", "age": 18 }, { "name": "chen", "age": 16 }];
console.log(_.takeWhile(array, item => item.age > 16)); //[ { name: 'mandy', age: 18 }

15._.union([arrays])——创建一个按顺序排列的唯一值的数组。所有给定数组的元素值使用SameValueZero做等值比较。(注: arrays(数组)的并集,按顺序返回,返回数组的元素是唯一的)

console.log(_.union([3, 3, 1, 4], [2, 5, 5, 6])); //[ 3, 1, 4, 2, 5, 6 ]

16._.unionBy([arrays], [iteratee=_.identity])——这个方法类似 _.union ,除了它接受一个 iteratee (迭代函数),调用每一个数组(array)的每个元素以产生唯一性计算的标准。iteratee 会传入一个参数:(value)

console.log(_.unionBy([2.1, 1.4, 5.8], [3.1, 1.3, 5.2, 7.1], Math.floor));
//[ 2.1, 1.4, 5.8, 3.1, 7.1 ]

17._.unionWith([arrays], [comparator])——这个方法类似 _.union, 除了它接受一个 comparator 调用比较arrays数组的每一个元素。 comparator 调用时会传入2个参数: (arrVal, othVal)

console.log(_.unionWith([1, 3, 2], [4, 5, 3, 2], _.isEqual)); //[ 1, 3, 2, 4, 5 ]

18._.uniq(array)——创建一个去重后的array数组副本。只有第一次出现的元素才会被保留。

console.log(_.uniq([1, 1, 4, 3, 5, 1, 3, 4])); //[ 1, 4, 3, 5 ]

19._.uniqBy(array, [iteratee=_.identity])——这个方法类似 _.uniq ,除了它接受一个 iteratee (迭代函数),调用每一个数组(array)的每个元素以产生唯一性计算的标准。iteratee 调用时会传入一个参数:(value)

console.log(_.unionBy([2.1, 2.7, 4.2, 4.7], Math.floor)); //[ 2.1, 4.2 ]

20._.uniqWith(array, [comparator])——这个方法类似 _.uniq, 除了它接受一个 comparator 调用比较arrays数组的每一个元素。 comparator 调用时会传入2个参数: (arrVal, othVal)

console.log(_.unionWith([2, 3, 4], [4, 3, 5, 6], _.isEqual)); //[ 2, 3, 4, 5, 6 ]

21._.zip([arrays])——创建一个分组元素的数组,数组的第一个元素包含所有给定数组的第一个元素,数组的第二个元素包含所有给定数组的第二个元素,以此类推。

console.log(_.zip(["mandy", "chen"], [16, 18], [666, 999])); 
//[ [ 'mandy', 16, 666 ], [ 'chen', 18, 999 ] ]

22._.unzip(array)——这个方法类似于_.zip,除了它接收分组元素的数组,并且创建一个数组,分组元素到打包前的结构。(:返回数组的第一个元素包含所有的输入数组的第一元素,第一个元素包含了所有的输入数组的第二元素,依此类推。)

console.log(_.unzip([[ 'mandy', 16, 666 ], [ 'chen', 18, 999 ]]));
//[ [ 'mandy', 'chen' ], [ 16, 18 ], [ 666, 999 ] ]

23._.zipObject([props=[]], [values=[]])——这个方法类似 _.fromPairs,除了它接受2个数组,第一个数组中的值作为属性标识符(属性名),第二个数组中的值作为相应的属性值。

console.log(_.zipObject(["name", "age"], ["mandy", 18]));
//{ name: 'mandy', age: 18 }

24._.zipObjectDeep([props=[]], [values=[]])——这个方法类似 _.zipObject,除了它支持属性路径。

console.log(_.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]));
// { a: { b: [ [Object], [Object] ] } }

25._.zipWith([arrays], [iteratee=_.identity])——这个方法类似于_.zip,不同之处在于它接受一个 iteratee(迭代函数),来 指定分组的值应该如何被组合。 该iteratee调用每个组的元素: (...group).

console.log(_.zipWith([1, 2, 3], [4, 5, 6], [7, 8, 9], (a, b, c) => a + b + c)); 
//[ 12, 15, 18 ]

26._.unzipWith(array, [iteratee=_.identity])——此方法类似于_.unzip,除了它接受一个iteratee指定重组值应该如何被组合。iteratee 调用时会传入每个分组的值: (...group)

console.log(_.unzipWith([[1, 2], [10, 20]], _.add)); //[ 11, 22 ]

27._.without(array, [values])——创建一个剔除所有给定值的新数组,剔除值的时候,使用SameValueZero做相等比较。

let array=[1, 2, 3, 4, 2, 3, 1, 5];
console.log(_.without(array, 1, 2)); //[ 3, 4, 3, 5 ]
console.log(array); //[1, 2, 3, 4, 2, 3, 1, 5]
  • 不改变原数组

28._.xor([arrays])——创建一个给定数组唯一值的数组,使用symmetric difference做等值比较。返回值的顺序取决于他们数组的出现顺序。

console.log(_.xor([4, 3, 2], [8, 2, 4])); //[ 3, 8 ]

29._.xorBy([arrays], [iteratee=_.identity])——这个方法类似 _.xor ,除了它接受 iteratee(迭代器),这个迭代器 调用每一个 arrays(数组)的每一个值,以生成比较的新值。iteratee 调用一个参数: (value).

console.log(_.xorBy([2.4, 4.3, 1.3], [2.7, 6.3, 1, 9], Math.floor));
//[ 4.3, 6.3, 9 ]

30._.xorWith([arrays], [comparator])——该方法是像 _.xor,除了它接受一个 comparator ,以调用比较数组的元素。 comparator 调用2个参数:(arrVal, othVal).

console.log(_.xorWith([1, 4, 3, 2], [1, 3, 4, 7], _.isEqual)); //[ 2, 7 ]

注意事项

  • by 根据方法或属性
  • with lodash方法比如isEqual
  • at 和index相关
  • chunk 分块
  • compact 去除假值元素
  • difference 和其他数组不同的值
  • flattendeep 全部拍平
  • frompairs 数组对转换成对象
  • intersection 交集
  • union 并集
  • xor 异或
  • pull 移除元素
  • 含sorted的方法接受有序数组
  • 同名含By的方法额外接受一个迭代器参数
  • 同名含Last的方法返回的是符合筛选条件元素的最后一个

 

  • union和uniq的区别:union支持多个数组去重,uniq只能是一个数组
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值