lodash库方法说明

记录loads.js关于数组,字符,对象等常用方法。 并按功能分到一块方便查找

一. 数组方法

# 查
head(array)	# 返回array的第一个元素
last(array)	# 获取array最后一个元素
nth(array, n) # 获取第n个元素, n可以为负数
sortedIndex(array, value)	# value可以插入已排序数组array的位置,返回索引	([3,5], 4) => 1
xor([arrays])	# 返回多个数组的唯一值 ([2,1],[2,3]) => [1,3]
findIndex(array, value) # 查找value, 返回第一个匹配的值的索引

# 改
slice(array, [start], [end])	# 裁剪数组	不包括end
drop(array, [n=1])  # 切片, n是要去除的元素个数
dropRigth(array, [n=1]) # 切片 去除尾部元素
take(array, [n=1])	# 切片 从头开始取n个元素
takeRight(array, [n=1])	# 切片 从尾部开始提取n个元素
chunk(array, [size])   # 将array拆分成多个size长度的区块
compact(array)				 # 返回不包含(false,null,NaN,undefined,0,'')的真数组
concat(array, [values]) # 合并数组
fill(array, value, [start], [end]) # 用value值填充数组 会改变原数组

# 删
tail(array) # 去除array第一个元素
initial(array) # 去除array最后一个元素
pull(array, [values])	# 去除array中等于value的值
pullAll(array, values)	# 类似pull 接收values数组
pullAt(array, [indexs])	# 原数组上移除索引为indexs的元素
remove(array, func)	# 原数组上移除满足func返回条件的值
without(array, [values])	# 返回剔除values后的新array

# 其他
reverse(array)	# 反转数组
intersection([arrays]) # 返回多个数组的交集
difference(array, [values])  # 返回非交集数组 ([1,2,3], [4,2]) => [1,3]
union([arrays])	# 多个数组的并集(已去重)
uniq(array)	# 去重数组

flatten(array) # 减少一级array嵌套深度
flattenDeep(array) # array递归为一维数组
flattenDepth(array, [depth]) # 减少depth层嵌套
fromPairs(pairs) # 键值对数组改为对象。[['fred', 30]] => {'fred':30}

# 这两个有些像大学学过的向量运算
zip([arrays]) # 长度相同的数组打包	([1,2],[3,4],[5,6]) => [[1,3,5],[2,4,6]]
unzip(array)	# 对数组进行拆分([1,2,3],[4,5,6])=> [[1,4],[2,5],[3,6]]

二. 集合方法

countBy(coll, func)	# 计数	(['one', 'two', 'three'], 'length') => {'3':2, '5':1}
size(coll)	# 长度	数组返回元素个数,字符串返回字符长度, 集合返回可遍历值个数

every(coll, func)	#	判断是否都为真	但会对空集合返回true
some(coll, func)	# 有真则返回true
includes(coll, value, [fromIndex]) # 检查value是否在collection中,fromIndex为起始位置,返回布尔值

filter(coll, func)	# 过滤 返回判断为真的新数组
reject(coll, func)	# 与filter相反,返回非真新数组

find(coll, func)	# 返回第一个判断为真的第一个元素
findLast(coll, func)	# 类似于find,自右向左

flatMap(coll, func)	# 返回扁平化后的数组	([1,2], (n)=>[n,n]) => [1,1,2,2]
flatMapDeep(coll, func)	# 深度扁平化	([1,2], (n)=>[[n,n]]) => [1,1,2,2]

forEach/each(coll, func)	# 遍历
invokeMap(coll, path, [args]) # 调用path的方法遍历coll,args为参数	([123,456], String.property.split, '') => (['1','2','3'],['4','5','6'])
groupBy(coll, func)	# 分组聚合	(['one', 'two', 'three'], 'length') => {'3': ['one', 'two'], '5': ['three']}
keyBy(coll, func) # 与groupBy类似, 不过每个key为func返回的值
map(coll, func)	# 遍历coll后返回新的结果

orderBy(coll, [func], [orders]) # 排序
sortBy(coll, [func])	# 升序排序
sample(coll)	# 返回随机元素
sampleSize(coll, n)	# 返回n个随机元素
shuffle(coll)	# 打乱集合顺序
partition(coll, [func]) # 创建一个分为两组的元素数组, 分别为结果为true和结果为false
# 示例:
var users = [
  { 'user': 'barney',  'age': 36, 'active': false },
  { 'user': 'fred',    'age': 40, 'active': true },
  { 'user': 'pebbles', 'age': 1,  'active': false }
];

_.partition(users, function(o) { return o.active; });
// => objects for [['fred'], ['barney', 'pebbles']]
reduce(coll, [func], [accumulator])	# 压缩 collection(集合)为一个值
reduceRight(coll, [func], [accumulator])	# 类似reduce, 自右向左
# 示例
_.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
  (result[value] || (result[value] = [])).push(key);
  return result;
}, {});
// => { '1': ['a', 'c'], '2': ['b'] }

三. 函数方法

after(n, func)	# 创建一个函数,被调用n次后,执行func
before(n, func)	# 调用func函数次数不超过n次的函数, 超过之后返回最后一次调用的结果
ary(func, [n])	# 创建一个调用func的函数, n为func参数长度
bindKey(object, key, [partials])	# 创建一个函数,在object[key]上通过接收partials附加参数,调用这个方法, 允许重新定义绑定函数即使它还不存在
curry(func, [arity=func.length])	# 柯里化函数(笔试常考题)
curryRight(func, [arity=func.length])	# 柯里化函数,参数顺序自右向左
debounce(func, [wait], [options={}])	# 防抖函数,func调用后等待wait毫秒后执行, options为附加参数
throttle(func, [wait=0], [options={}])	# 节流函数,wait秒内最多执行func一次

defer(func, [args])	# 推迟调用, 附加参数args会传给func
delay(func, wait, [args])	# 延迟wait毫秒后调用func
flip(func)	# 翻转func参数 返回新的函数
memoize(func, [resolver])	# 缓存func结果
negate(predicate)	# 对断言函数(返回值为true/false)结果取反
once(func)	# 返回只能调用func一次的函数,重复调用返回第一次调用结果
overArgs(func, [transforms]) # func参数为transforms的返回值
rest(func, [start])	# 除start外,其他参数作为数组传入, 类似于apply
spread(func, [start=0])	# 参数作为数组传入
unary(func)	# 返回一个最多接收一个参数的函数, 忽略多余参数
wrap(value, [wrapper=identity])	# 创建一个函数,value包装在wrapper函数的第一个参数里, 附加参数给wrapper

四. ‘Lang’ method

# 转换
castArray(value)		# 强制转换为array
toArray(value)			# 转换value为数组

toFinite(value)			# 转换为有限数字
toInteger(value)		# 转换为一个整数
toLength(value)			# 转换为可以用作数组长度的整数
toNumer(value)			# 转换为一个数字
toSafeInteger(value)	# 转换为安全整数

toPlainObject(value)	# 转为普通对象
toString(value)
clone(value)				# 浅拷贝
cloneDeep(value)		# 深拷贝

# 比较
conformsTo(object, source)	# 检查object是否符合source	_.conformsTo({'a':1}, {'a': o=>o>1}) // false
eq(value, other)	# 比较value与other值是否相等
gt(value, other)	# 大于
lt(value, other)	# 小于
lte(v, o)	# 小于等于
gte(value, other)	# 大于等于
isEqual(value, other)	# 深比较	值完全相等 不比较类型

# 判断类型
isArguments(value)	# value是否是类arguments对象
isArray(value)			# 判断是否为array
isArrayBuffer(value)
isBoolean(value)
isBuffer(value)
isDate(value)
isElement(value)
isEmpty(value)	# 检查 value 是否为一个空对象,集合,映射或者set
isArrayLike(value)	# 是否是类数组
isArrayLikeObject(value)	# 是否是类数组对象
isFinite(value)	# 是否是有限数值
isFunction(value)
isInteger(value)
isLength(value)	# 检查 value 是否为有效的类数组长度
isMap(value)	# 检查 value 是否为一个 Map 对象。
isNaN(value)
isNative(value)	# 是否是一个原生函数
isNil(value)	# 是否是null或undefined
isNull(value)	# 是否是null
isNumber(value)
isString(value)
isSymbol(value)
isUndefined(value)
isSet(value)	# 检查 value 是否是一个Set对象。
isObject(value)
isObjectLike(value)	# 是否是类对象
isPlainObject(value)	# 是否是普通对象。 也就是说该对象由 Object 构造函数创建,或者 [[Prototype]] 为 null 
isRegExp(value)	# 是否为RegExp对象

五. 数学方法

ceil(number, [precision])	# 按precision(精度)向上舍入number
floor(number, [precision])	# 向下舍入number
round(number, [precision])	# 四舍五入

add(augend, addend)	# 两数相加
divide()	# 两数相除
max(array)
maxBy(array, func)	# func为排序标准 对数组中对象求最值
mean(array)	# 平均值
meanBy(array, func)	# 数组中对象求均值
min(array)
minBy(array, func)
multiply(a,b)	# 求a,b乘积
subtract(a,b)	# 两数相减
sum(array)	# 总和
sumBy(array, func)

六. 数字方法

clamp(number, [lower], upper)	# 返回限制在 lower 和 upper 之间的值
inRange(number, [start], end)	# 返回n是否在start与end之间,但不包括end
random([lower], [upper], [floating])	# 区间内的随机数

七. 对象方法

assign(object,[sources])	# 分配source对象的可枚举属性到object上
assignIn(object,[sources])	# 类似于assign,会遍历源对象
at(object, [paths])	# 创建一个数组,值来自object的paths路径对应的值
create(protoptype, [properties])	# 返回继承protoptype对象的新对象
defaults(object, [sources])	# 分配来源对象的可枚举属性到目标对象所有解析为 undefined 的属性上。 来源对象从左到右应用。 一旦设置了相同属性的值,后续的将被忽略掉。
findKey(object, [func])	# 返回最先被判断为真的元素key
findLastKey(object, [func])	# 类似于findKey, 反向遍历
forIn(object, [func])	# 遍历object
forInRight(object, [func])

八. 字符串方法

camelCase(string)	# 字符串转为驼峰写法
kebabCase(string)	# 以-分开单词并小写	kebabCase
lowerCase(string)	# 以空格分开单词并小写
upperCase(string)	# 以空格分开单词并大写
snakeCase(string)	# 以_分开单词并小写	snakeCase
startCase(string)	# 首字母大写并以空格分隔单词,原string为全大写则不变	'Foo Bar'
lowerFirst(string)	# string首字母小写
upperFirst(string)	# string首字母大写
capitalize(string)	# 字符串首字母转为大写,其他为小写
deburr(string)	# 转换string中的字母为基本的拉丁字母,去除变音标记
toLower(string)	# 整个string转为小写
toUpper(string)	# 全大写

trim(string, [chars])	# 移除前面或后面的空格或指定字符
trimEnd(string, [chars])	# 移除后面的空格或指定字符
trimStart(string, [chars])	# 移除前面的空格或指定字符
truncate(string, [options={}])	# 超出options.length截断字符串, 截断后超出部分显示options.omission(默认为...)

unescape(string)	# 转换string字符串中的 HTML 实体 &, <, >, ", ', 和 ` 为对应的字符

startsWith(string, target, position)	# 检查字符串string是否以 target 开头
endsWith(string, target, position)	# 检查字符串string是否以给定的target字符串结尾
escape(string)	# 转义string中的"&", "<", ">", '"', "'", 和 "`" 字符为HTML实体字符
escapeRegExp(string)	# 转义 RegExp 字符串中特殊的字符 "^", "$", "", ".", "*", "+", "?", "(", ")", "[", "]", "{", "}", 和 "|" '.'
pad(string, length, [chars=''])	# 如果string长度小于length,则从左右侧填充chars字符
padEnd(string,lenght,[chars=''])	# 右侧填充
padStart(string,length,[chars=''])	# 左侧填充
repeat(string, [n=1])	# 重复n次给定字符串
split(string, separator, limit) # 拆分
replace(string, pattern, replacement)	# 替换string字符串中匹配的pattern为给定的replacement
words(string, pattern)	# 拆分string中的词为数组

template(string, options)
// 创建一个预编译模板方法,可以插入数据到模板中 "interpolate" 分隔符相应的位置。 HTML会在 "escape" 分隔符中转换为相应实体。 在 "evaluate" 分隔符中允许执行JavaScript代码。 在模板中可以自由访问变量。 如果设置了选项对象,则会优先覆盖 _.templateSettings 的值。

// 使用 "interpolate" 分隔符创建编译模板
var compiled = _.template('hello <%= user %>!');
compiled({ 'user': 'fred' });
// => 'hello fred!'
 
// 使用 HTML "escape" 转义数据的值
var compiled = _.template('<b><%- value %></b>');
compiled({ 'value': '<script>' });
// => '<b>&lt;script&gt;</b>'
 
// 使用 "evaluate" 分隔符执行 JavaScript 和 生成HTML代码
var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
compiled({ 'users': ['fred', 'barney'] });
// => '<li>fred</li><li>barney</li>'
 
// 在 "evaluate" 分隔符中使用内部的 `print` 函数
var compiled = _.template('<% print("hello " + user); %>!');
compiled({ 'user': 'barney' });
// => 'hello barney!'
 
// 使用 ES 分隔符代替默认的 "interpolate" 分隔符
var compiled = _.template('hello ${ user }!');
compiled({ 'user': 'pebbles' });
// => 'hello pebbles!'
 
// 使用自定义的模板分隔符
_.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
var compiled = _.template('hello {{ user }}!');
compiled({ 'user': 'mustache' });
// => 'hello mustache!'
 
// 使用反斜杠符号作为纯文本处理
var compiled = _.template('<%= "\\<%- value %\\>" %>');
compiled({ 'value': 'ignored' });
// => '<%- value %>'
 
// 使用 `imports` 选项导入 `jq` 作为 `jQuery` 的别名
var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
compiled({ 'users': ['fred', 'barney'] });
// => '<li>fred</li><li>barney</li>'
 
// 使用 `sourceURL` 选项指定模板的来源URL
var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
compiled(data);
// => 在开发工具的 Sources 选项卡 或 Resources 面板中找到 "greeting.jst"
 
// 使用 `variable` 选项确保在编译模板中不声明变量
var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
compiled.source;
// => function(data) {
//   var __t, __p = '';
//   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
//   return __p;
// }
 
// 使用 `source` 特性内联编译模板
// 便以查看行号、错误信息、堆栈
fs.writeFileSync(path.join(cwd, 'jst.js'), '\
  var JST = {\
    "main": ' + _.template(mainText).source + '\
  };\
');
发布了171 篇原创文章 · 获赞 246 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/weixin_42042680/article/details/102905268