Lodash 常用函数集合
_.chunk(array, [size=1])
将数组拆分成多个大小固定的块。
参数:
array(Array): 需要拆分的数组。[size=1](number): 每个块的大小。
返回值: (Array): 返回拆分后的新数组。
示例:
_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]
_.compact(array)
创建一个移除了所有 falsy 值的数组副本。
参数:
array(Array): 需要处理的数组。
返回值: (Array): 返回过滤掉 falsy 值的新数组。
示例:
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]
_.debounce(func, [wait=0], [options={}])
创建一个 debounce 函数,该函数会延迟 wait 毫秒后调用 func 方法。
参数:
func(Function): 需要延迟调用的函数。[wait=0](number): 延迟的时间(毫秒)。[options={}](Object): 配置对象。
返回值: (Function): 返回延迟执行的函数。
示例:
_.debounce(() => {
console.log('Hello World');
}, 2000);
// 在 2 秒后输出 'Hello World'
_.difference(array, [values])
创建一个从第一个数组中移除所有给定值的数组。
参数:
array(Array): 需要处理的数组。[values](...Array): 要排除的值。
返回值: (Array): 返回新的排除指定值后的数组。
示例:
_.difference([2, 1, 5], [2, 3]);
// => [1, 5]
.flatMap(array, [iteratee=.identity])
创建一个通过转换每个元素后拍平的数组。
参数:
array(Array): 需要处理的数组。[iteratee=_.identity](Function): 对每个元素进行转换的函数。
返回值: (Array): 返回拍平处理后的新数组。
示例:
function duplicate(n) {
return [n, n];
}
_.flatMap([1, 2], duplicate);
// => [1, 1, 2, 2]
_.flatten(array)
减少一个嵌套多层的数组为一维数组。
参数:
array(Array): 需要减少维度的数组。
返回值: (Array): 返回减少维度后的新数组。
示例:
_.flatten([1, [2, [3, [4]], 5]]);
// => [1, 2, [3, [4]], 5]
.groupBy(collection, [iteratee=.identity])
创建一个按照给定条件分组的对象。
参数:
collection(Array|Object): 需要分组的集合。[iteratee=_.identity](Function|string): 对每个元素进行分组的函数或属性名称。
返回值: (Object): 返回分组后的对象。
示例:
_.groupBy([6.1, 4.2, 6.3], Math.floor);
// => { '4': [4.2], '6': [6.1, 6.3] }
_.groupBy(['one', 'two', 'three'], 'length');
// => { '3': ['one', 'two'], '5': ['three'] }
.orderBy(collection, [iteratees=[.identity]], [orders])
根据指定的条件对集合进行排序。
参数:
collection(Array|Object): 需要排序的集合。[iteratees=[_.identity]](...(Function|Function[]|string|string[])): 排序的条件,可以是函数或属性名称。[orders](...(string|string[])): 每个排序条件的顺序,可以是 "asc" 或 "desc"。
返回值: (Array): 返回排好序的新数组。
示例:
var users = [
{ 'user': 'fred', 'age': 48 },
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'barney', 'age': 34 }
];
_.orderBy(users, ['user', 'age'], ['asc', 'desc']);
// => [{ 'user': 'barney', 'age': 36 }, { 'user': 'barney', 'age': 34 }, { 'user': 'fred', 'age': 48 }, { 'user': 'fred', 'age': 40 }]
.partition(collection, [predicate=.identity])
创建一个根据给定条件分成两个数组的集合。
参数:
collection(Array|Object): 需要分组的集合。[predicate=_.identity](Function): 进行分组的条件函数。
返回值: (Array): 返回分组后的新数组。
示例:
_.partition([1, 2, 3], n => n % 2);
// => [[1, 3], [2]]
_.sample(collection)
从集合中随机获取一个元素。
参数:
collection(Array|Object): 需要采样的集合。
返回值: (*): 返回随机获取的元素。
示例:
_.sample([1, 2, 3, 4]);
// => 2
_.shuffle(collection)
打乱集合中元素的顺序。
参数:
collection(Array|Object): 需要打乱顺序的集合。
返回值: (Array): 返回打乱顺序后的新数组。
示例:
_.shuffle([1, 2, 3, 4]);
// => [4, 1, 3, 2]
_.throttle(func, [wait=0], [options={}])
创建一个 throttle 函数,该函数会每隔一段时间调用 func 方法。
参数:
func(Function): 需要延迟调用的函数。[wait=0](number): 延迟的时间(毫秒)。[options={}](Object): 配置对象。
返回值: (Function): 返回定时执行的函数。
示例:
_.throttle(() => {
console.log('Hello World');
}, 2000);
// 每隔 2 秒输出 'Hello World'
_.union(...arrays)
创建一个包含所有给定数组中唯一值的数组。
参数:
...arrays(...Array): 需要合并的数组。
返回值: (Array): 返回包含所有唯一值的新数组。
示例:
_.union([2], [1, 2]);
// => [2, 1]
_.uniq(array)
创建一个去重后的数组副本。
参数:
array(Array): 需要去重的数组。
返回值: (Array): 返回去重后的新数组。
示例:
_.uniq([2, 1, 2]);
// => [2, 1]
_.zip(...arrays)
将多个数组中相同位置的元素合并到一起。
参数:
...arrays(...Array): 需要合并的数组。
返回值: (Array): 返回合并后的新数组。
示例:
_.zip(['a', 'b'], [1, 2], [true, false]);
// => [['a', 1, true], ['b', 2, false]]
_.zipObject(props, [values=[]])
创建一个对象,键值对由两个分别为 props 和 values 的数组组成。
参数:
props(Array|string): 对象的键的名称。[values=[]](Array): 对象的值。
返回值: (Object): 返回生成的新对象。
示例:
_.zipObject(['a', 'b'], [1, 2]);
// => { 'a': 1, 'b': 2 }
_.clone(value)
创建一个浅拷贝的副本。
参数:
value(*): 需要复制的值。
返回值: (*): 返回浅拷贝后的新值。
示例:
var objects = [{ 'a': 1 }, { 'b': 2 }];
var shallow = _.clone(objects);
console.log(shallow[0] === objects[0]);
// => true
_.cloneDeep(value)
创建一个深拷贝的副本。
参数:
value(*): 需要复制的值。
返回值: (*): 返回深拷贝后的新值。
示例:
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false
_.get(object, path, [defaultValue])
获取对象中指定路径上的值。
参数:
object(Object): 需要获取值的对象。path(Array|string): 对象中要访问的路径。[defaultValue](*): 如果找不到对应的值,返回该默认值。
返回值: (*): 返回获取到的值。
示例:
var object = { 'a': [{ 'b': { 'c': 3 } }] };
_.get(object, 'a[0].b.c');
// => 3
_.get(object, ['a', '0', 'b', 'c']);
// => 3
_.get(object, 'a.b.c', 'default');
// => 'default'
_.has(object, path)
检查对象中是否有指定路径上的属性。
参数:
object(Object): 要检查的对象。path(Array|string): 要检查的路径。
返回值: (boolean): 如果对象中有该属性,则返回 true;否则返回 false。
示例:
var object = { 'a': { 'b': 2 } };
_.has(object, 'a');
// => true
_.has(object, 'a.b');
// => true
_.has(object, ['a', 'b']);
// => true
_.has(object, 'b');
// => false
_.invert(object)
创建一个将对象中的键与值互换后的新对象。
参数:
object(Object): 需要互换键值对的对象。
返回值: (Object): 返回互换键值对后的新对象。
示例:
var object = { 'a': 1, 'b': 2, 'c': 1 };
_.invert(object);
// => { '1': 'c', '2': 'b' }
_.keys(object)
获取对象中所有可枚举属性的名称数组。
参数:
object(Object): 需要获取属性名的对象。
返回值: (Array): 返回属性名数组。
示例:
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.keys(new Foo);
// => ['a', 'b'] (无法获取原型链中的 c 属性)
_.keys('hi');
// => ['0', '1'] (获取字符串中的索引)
_.merge(object, ...sources)
将多个源对象合并到目标对象上。
参数:
object(Object): 目标对象。...sources(...Object): 多个源对象。
返回值: (Object): 返回合并后的目标对象。
示例:
var object = {
'a': [{ 'b': 2 }, { 'd': 4 }]
};
var other = {
'a': [{ 'c': 3 }, { 'e': 5 }]
};
_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }