Lodash——数组

343 阅读2分钟

chunk数组分区

我们都知道chunk其实就是分区的意思,因此chunk方法会对数组进行分区

_.chunk(array, [size=1])

将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。

参数

  1. array(Array):需要处理的数组
  2. [ size=1 ](Number):每个chunk的长度或大小,默认为1

返回

返回一个包含拆分区块的新数组

console.log(_.chunk(['a','b','c','d']));//size默认为1
// [ [ 'a' ], [ 'b' ], [ 'c' ], [ 'd' ] ]
console.log(_.chunk(['a','b','c','d'],2));
// [ [ 'a', 'b' ], [ 'c', 'd' ] ]
console.log(_.chunk(['a','b','c','d'],3));
// [ [ 'a', 'b', 'c' ], [ 'd' ] ]
console.log(_.chunk(['a','b','c','d'],5));
// [ [ 'a', 'b', 'c', 'd' ] ]

compact

_.compact(array)

创建一个新数组,包含原数组中所有的非假值元素。例如false, null,0, "", undefined, 和 NaN 都是被认为是“假值”。

参数

  1. array(Array):需要处理的数组

返回

返回过滤掉假值的新数组

console.log(_.compact([0, 1, false, 2, '',null,undefined,NaN, 3]))
// => [1, 2, 3]

concat连接数组

_.concat(array, [values])

参数

  1. array(Array):需要处理的数组
  2. values:连接的值

返回

返回连接后的新数组

var array = [1];
var other = _.concat(array, 2, [3], [[4]]);
 
console.log(other);
// => [1, 2, 3, [4]]
 
console.log(array);
// => [1]

不改变原数组array

difference

_.difference(array, [values])

创建一个具有唯一array值的数组,每个值不包含在其他给定的数组中。(注:即创建一个新数组,这个数组中的值,为第一个数字(array 参数)排除了给定数组中的值。)该方法使用SameValueZero做相等比较。结果值的顺序是由第一个数组中的顺序确定。

参数

  1. array(Array):需要处理的数组
  2. values:排除的值

返回

返回过滤后的新数组

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

与concat不同的是,values必须是数组类型。其次,不会改变原数组。

differenceBy

_.differenceBy(array, [values], [iteratee=_.identity])

这个方法类似_.difference ,除了它接受一个 iteratee (注:迭代器), 调用array 和 values 中的每个元素以产生比较的标准。 结果值是从第一数组中选择。iteratee 会调用一个参数:(value)。(注:首先使用迭代器分别迭代array 和 values中的每个元素,返回的值作为比较值)。

参数

  1. array(Array):需要处理的数组
  2. values:排除的值
  3. [iteratee=_.identity] (Array|Function|Object|string): iteratee 调用每个元素。

返回

返回过滤后的新数组

console.log(_.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor));
// => [3.1, 1.3]
 
// The `_.property` iteratee shorthand.
console.log(_.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'));
// => [{ 'x': 2 }]

console.log(_.differenceBy([{ 'x': 2 }, 'x'], ['x'], 'x'));
// => [{ 'x': 2 }]

这个方法比较类似于map,只不过它不会修改数组元素,而且它除了接受函数外还接受字符串等。

接受函数就是用函数对每个数组项作处理后比较,字符串一般就是作为对象属性