_(value)
创建一个lodash
对象,包装value
后的对象启用隐式方法链。返回的数组、集合、方法相互之间能够链式调用。检索唯一值或返回原始值会自动解除链条并返回计算后的值,否则需要调用 _#value
方法解除链(即获得计算结果)。
显式链式调用,在任何情况下需要先用 _#value
解除链后,才能使用_.chain
开启。
链式方法是惰性计算的,直到隐式或者显式调用了 _#value
才会执行计算。
惰性计算接受几种支持 shortcut fusion 的方法, shortcut fusion 是一种通过合并链式 iteratee 调用从而大大降低迭代的次数以提高执行性能的方式。 部分链有资格 shortcut fusion,如果它至少有超过200
个元素的数组和任何只接受一个参数的 iteratees。 触发的方式是任何一个 shortcut fusion 有了变化。
链式方法支持定制版本,只要 _#value
包含或者间接包含在版本中。
除了 lodash 的自身方法,包装后的对象还支持 Array
和 String
的方法。
支持 Array
的方法:concat
, join
, pop
, push
, shift
, sort
, splice
, 和 unshift
支持 String
的方法:replace
和 split
支持 shortcut fusion 的方法:at
, compact
, drop
, dropRight
, dropWhile
, filter
, find
,findLast
, head
, initial
, last
, map
, reject
, reverse
, slice
,tail
, take
, takeRight
, takeRightWhile
, takeWhile
, 和 toArray
支持 链式调用 的方法:after
, ary
, assign
, assignIn
, assignInWith
, assignWith
, at
,before
, bind
, bindAll
, bindKey
, castArray
, chain
, chunk
,commit
, compact
, concat
, conforms
, constant
, countBy
, create
,curry
, debounce
, defaults
, defaultsDeep
, defer
, delay
,difference
, differenceBy
, differenceWith
, drop
, dropRight
,dropRightWhile
, dropWhile
, extend
, extendWith
, fill
, filter
,flatMap
, flatMapDeep
, flatMapDepth
, flatten
, flattenDeep
,flattenDepth
, flip
, flow
, flowRight
, fromPairs
, functions
,functionsIn
, groupBy
, initial
, intersection
, intersectionBy
,intersectionWith
, invert
, invertBy
, invokeMap
, iteratee
, keyBy
,keys
, keysIn
, map
, mapKeys
, mapValues
, matches
, matchesProperty
,memoize
, merge
, mergeWith
, method
, methodOf
, mixin
, negate
,nthArg
, omit
, omitBy
, once
, orderBy
, over
, overArgs
,overEvery
, overSome
, partial
, partialRight
, partition
, pick
,pickBy
, plant
, property
, propertyOf
, pull
, pullAll
, pullAllBy
,pullAllWith
, pullAt
, push
, range
, rangeRight
, rearg
, reject
,remove
, rest
, reverse
, sampleSize
, set
, setWith
, shuffle
,slice
, sort
, sortBy
, splice
, spread
, tail
, take
, takeRight
,takeRightWhile
, takeWhile
, tap
, throttle
, thru
, toArray
,toPairs
, toPairsIn
, toPath
, toPlainObject
, transform
, unary
,union
, unionBy
, unionWith
, uniq
, uniqBy
, uniqWith
, unset
,unshift
, unzip
, unzipWith
, update
, updateWith
, values
,valuesIn
, without
, wrap
, xor
, xorBy
, xorWith
, zip
,zipObject
, zipObjectDeep
, and zipWith
默认 不 支持 链式调用 的方法: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
参数
value
(*): 需要被包装为lodash
实例的值。
返回
(Object): 返回 lodash
包装后的实例。
例子
function square(n) {
return n * n;
}
var wrapped = _([1, 2, 3]);
// 返回未包装的值
wrapped.reduce(_.add);
// => 6
// 返回链式包装的值
var squares = wrapped.map(square);
_.isArray(squares);
// => false
_.isArray(squares.value());
// => true