lodash 学习笔记 (7)

默认 不支持 链式调用 的方法: add, attempt, camelCase, capitalize, ceil, clamp, clone, cloneDeep, cloneDeepWith, cloneWith, conformsTo, deburr, defaultTo, divide, each, eachRight, endsWith, eq, escape, escapeRegExp, every, find, findIndex, findKey, findLast, findLastIndex, findLastKey, first, floor, forEach, forEachRight, forIn, forInRight, forOwn, forOwnRight, get, gt, gte, has, hasIn, head, identity, includes, indexOf, inRange, invoke, isArguments, isArray, isArrayBuffer, isArrayLike, isArrayLikeObject, isBoolean, isBuffer, isDate, isElement, isEmpty, isEqual, isEqualWith, isError, isFinite, isFunction, isInteger, isLength, isMap, isMatch, isMatchWith, isNaN, isNative, isNil, isNull, isNumber, isObject, isObjectLike, isPlainObject, isRegExp, isSafeInteger, isSet, isString, isUndefined, isTypedArray, isWeakMap, isWeakSet, join, kebabCase, last, lastIndexOf, lowerCase, lowerFirst, lt, lte, max, maxBy, mean, meanBy, min, minBy, multiply, noConflict, noop, now, nth, pad, padEnd, padStart, parseInt, pop, random, reduce, reduceRight, repeat, result, round, runInContext, sample, shift, size, snakeCase, some, sortedIndex, sortedIndexBy, sortedLastIndex, sortedLastIndexBy, startCase, startsWith, stubArray, stubFalse, stubObject, stubString, stubTrue, subtract, sum, sumBy, template, times, toFinite, toInteger, toJSON, toLength, toLower, toNumber, toSafeInteger, toString, toUpper, trim, trimEnd, trimStart, truncate, unescape, uniqueId, upperCase, upperFirst, value, and words。

(4)demo // 隐式链 - 自动结束 _([1, 2, 3]).head() // 注意:_([1, 2, 3]).head().reverse() 会报错,因为head()已经触发了自动结束。 // 隐式链 - 需手动结束 _([1, 2, 3]) .reverse() .value(); // --------------------------------------------- var users = [ { 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 } ]; // 启用显式链 方法一 _(users) .chain() .head() .pick('user') .value(); // => { 'user': 'barney' } // 启用显式链 方法二 _.chain(users) .head() .pick("user") .value(); // => { 'user': 'barney' } (5)处理中间结果

tap - 适合打印中间结果

thru - 适合修改中间结果

1、tap - 直接修改值 _([1, 2, 3]) .tap(function(array) {    // 改变传入的数组 array.pop(); }) .reverse() .value(); // => [ 2, 1 ] 2、thru - 需返回值 _(' abc ') .chain() .trim() .thru(function(value) { return [value]; }) .value(); // => ['abc'] (6)copy 链式队列(可换新值传入)

plant

re = _.chain([1, 2, 3]).head(); re2 = re4.plant([4, 5, 6]); re2.value(); // => 4

对于 隐式链 - 自动结束 的链式队列,plant 会无计可施,建议转为显式的链式队列写法,再用plant。

四、总结 1、lodash 的优势 (1)支持函数式编程

函数式编程(functional programming)是一种将计算建模为表达式求值的编程风格。与命令式编程相反,命令式编程中的程序由在执行时更改全局状态的语句组成。函数式编程通常避免使用可变状态,而倾向于无副作用的函数和不可变数据。

lodash 提供了 lodash/fp ,可支持函数式编程。这个文章开头有介绍,不赘述。

类似的库还有 Ramda。

(2)支持按需加载

这个文章开头有介绍,不赘述。

(3)Immutable

相反叫mutable

所有的方法都不会改变传入参数的原始对象,只会返回一个新的对象

但也有特例,比如 remove 方法。

(4)Compose(组合)

通过 flow,这个在上文有介绍,不赘述。

(5)lazy evaluation(惰性求值)

这个在 Sqe 章节有介绍,不赘述。

提一句,flow 也支持 lazy evaluation。

(6)null-safe

各种方法普遍对 null 值容错。

(7)不侵入原型

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygjgp.html