Module: object

对象相关函数

Functions

assign

assign(target, ...sources): Record<UnknownMapKey, any>

将一个或多个源对象的可枚举属性值分配到目标对象。如果源对象有多个,则按照从左到右的顺序依次对target赋值,相同属性会被覆盖

该函数会修改目标对象

  • 当目标对象是null/undefined时,返回空对象
  • 当目标对象是基本类型时,返回对应的包装对象
  • 当目标对象是不可扩展/冻结/封闭状态时,返回目标对象

Example

//{x:1,y:3}console.log(_.assign({x:1},{y:3}))

Parameters

NameTypeDescription
targetRecord<UnknownMapKey, any>目标对象
...sourcesany源对象

Returns

Record<UnknownMapKey, any>

返回target


assignWith

assignWith(target, ...sources): Record<UnknownMapKey, any>

assign相同,但支持自定义处理器

该函数会修改目标对象

Example

//{x: 1, y: '3y', z: null}console.log(_.assignWith({x:1},{y:3,z:4},(sv,tv,k)=>k=='z'?null:sv+k))

Parameters

NameTypeDescription
targetRecord<UnknownMapKey, any>目标对象
...sourcesany源对象

Returns

Record<UnknownMapKey, any>

返回target


clone

clone(obj): string | boolean | Record<UnknownMapKey, any>

浅层复制对象 如果是基本类型,返回原值 如果是函数类型,返回原值 只复制对象的自身可枚举属性

Example

//nullconsole.log(_.clone(null))

Parameters

NameType
objRecord<UnknownMapKey, any>

Returns

string | boolean | Record<UnknownMapKey, any>

被复制的新对象


cloneDeep

cloneDeep(obj): Record<UnknownMapKey, any>

完整复制对象,可以保持被复制属性的原有类型

如果obj是基本类型,返回原值 如果obj是函数类型,返回原值 只复制对象的自身可枚举属性

Example

//trueconsole.log(_.cloneDeep({d:new Date}).d instanceof Date)

Parameters

NameType
objRecord<UnknownMapKey, any>

Returns

Record<UnknownMapKey, any>

被复制的新对象


cloneDeepWith

cloneDeepWith(obj, handler?): any

完整复制对象,可以保持被复制属性的原有类型。支持赋值处理器

如果obj是基本类型,返回原值 如果obj是函数类型,返回原值 只复制对象的自身可枚举属性

Example

//trueconsole.log(_.cloneDeepWith({d:new Date}).d instanceof Date)

Parameters

NameTypeDescription
objRecord<UnknownMapKey, any>
handler?(v: any, k: UnknownMapKey, obj: Record<UnknownMapKey, any>) => any(objk,k,obj) 自定义赋值处理器,返回赋予新对象k的值。默认 identity

Returns

any

被复制的新对象


cloneWith

cloneWith(obj, handler?): string | boolean | Record<UnknownMapKey, any>

浅层复制对象,支持赋值处理器 如果obj是基本类型,返回原值 如果obj是函数类型,返回原值

只复制对象的自身可枚举属性

Example

//{x: 1, y: 2, z: null}console.log(_.cloneWith({x:1,y:2,z:3},(v,k)=>k=='z'?null:v))//nullconsole.log(_.cloneWith(null))

Parameters

NameTypeDefault valueDescription
objRecord<UnknownMapKey, any>undefined
handler?(v: any, k: string | number | symbol) => anyidentity(objk,k) 自定义赋值处理器,返回赋予新对象k的值

Returns

string | boolean | Record<UnknownMapKey, any>

被复制的新对象


defaults

defaults<T>(target, ...sources): T

将一个或多个源对象的可枚举属性值分配到目标对象中属性值为undefined的属性上。 如果源对象有多个,则按照从左到右的顺序依次对target赋值,相同属性会被忽略

该函数会修改目标对象

  • 当目标对象是null/undefined时,返回空对象
  • 当目标对象是基本类型时,返回对应的包装对象
  • 当目标对象是不可扩展/冻结/封闭状态时,返回目标对象

Example

//{a: 1, b: 2, c: 3}console.log(_.defaults({a:1},{b:2},{c:3,b:1,a:2}))

Since

0.21.0

Type parameters

NameType
Textends Record<UnknownMapKey, any>

Parameters

NameTypeDescription
targetT目标对象
...sourcesany1-n个源对象

Returns

T

返回target


defaultsDeep

defaultsDeep<T>(target, ...sources): T

defaults相同,但会递归对象属性

该函数会修改目标对象

Example

//{a: {x: 1, y: 2, z: 3}, b: 2}console.log(_.defaultsDeep({a:{x:1}},{b:2},{a:{x:3,y:2}},{a:{z:3,x:4}}))

Since

0.21.0

Type parameters

NameType
Textends Record<UnknownMapKey, any>

Parameters

NameTypeDescription
targetT目标对象
...sourcesany1-n个源对象

Returns

T

返回target


findKey

findKey<V>(object, predicate): string | number | symbol | undefined

object内的所有属性进行断言并返回第一个匹配的属性key

Example

const libs = { 'func.js':{platform:['web','nodejs'],tags:{utils:true}}, 'juth2':{platform:['web','java'],tags:{utils:false,middleware:true}}, 'soya2d':{platform:['web'],tags:{utils:true}}}//func.js 查询对象的keyconsole.log(_.findKey(libs,'tags.utils'))//juth2console.log(_.findKey(libs,{'tags.utils':false}))//tagsconsole.log(_.findKey(libs['soya2d'],'utils'))//2console.log(_.findKey([{a:1,b:2},{c:2},{d:3}],'d'))

Type parameters

Name
V

Parameters

NameTypeDescription
objectCollection<unknown>所有集合对象array / arrayLike / map / object / ...
predicateNonFuncItee | (value: V, index: UnknownMapKey, collection: Collection<unknown>) => boolean(value,index|key,collection) 断言
当断言是函数时回调参数见定义
其他类型请参考 iteratee

Returns

string | number | symbol | undefined

第一个匹配断言的元素的key或undefined


fromPairs

fromPairs(pairs): Record<UnknownMapKey, any>

toPairs反函数,创建一个由键值对数组组成的对象

Example

//{a:1,b:2,c:3}console.log(_.fromPairs([['a', 1], ['b', 2], ['c', 3]]))

Parameters

NameTypeDescription
pairsany[]键值对数组

Returns

Record<UnknownMapKey, any>

对象


functions

functions(obj): string

返回对象中的函数属性key数组

Example

const funcs = { a(){}, b(){}};//[a,b]console.log(_.functions(funcs))//[....]console.log(_.functions(_))

Since

0.18.0

Parameters

NameType
objRecord<UnknownMapKey, any>

Returns

string

函数名数组


get

get<V>(obj, path, defaultValue?): V

通过path获取对象属性值

Example

//2console.log(_.get([1,2,3],1))//Holyhighconsole.log(_.get({a:{b:[{x:'Holyhigh'}]}},['a','b',0,'x']))//Holyhigh2console.log(_.get({a:{b:[{x:'Holyhigh2'}]}},'a.b.0.x'))//Holyhighconsole.log(_.get({a:{b:[{x:'Holyhigh'}]}},'a.b[0].x'))//hiconsole.log(_.get([[null,[null,null,'hi']]],'[0][1][2]'))//not findconsole.log(_.get({},'a.b[0].x','not find'))

Type parameters

Name
V

Parameters

NameTypeDescription
objRecord<UnknownMapKey, any>需要获取属性值的对象,如果obj不是对象(isObject返回false),则返回defaultValue
pathstring | number | (string | number)属性路径,可以是索引数字,字符串key,或者多级属性数组
defaultValue?any如果path未定义,返回默认值

Returns

V

属性值或默认值


has

has(obj, key): boolean

检查指定key是否存在于指定的obj中

Example

//trueconsole.log(_.has({a:12},'a'))

Parameters

NameType
objRecord<UnknownMapKey, any>
keyUnknownMapKey

Returns

boolean

如果key存在返回true


keys

keys(obj): string

返回对象的所有key数组

只返回对象的自身可枚举属性

Example

let f = new Function("this.a=1;this.b=2;");f.prototype.c = 3;//[a,b]console.log(_.keys(new f()))

Parameters

NameType
objRecord<UnknownMapKey, any>

Returns

string

对象的key


keysIn

keysIn(obj): string

返回对象的所有key数组 包括原型链中的属性key

Example

let f = new Function("this.a=1;this.b=2;");f.prototype.c = 3;//[a,b,c]console.log(_.keysIn(new f()))

Parameters

NameType
objRecord<UnknownMapKey, any>

Returns

string

对象的key


merge

merge<T>(target, ...sources): T

类似assign,但会递归源对象的属性合并到目标对象。
如果目标对象属性值存在,但对应源对象的属性值为undefined,跳过合并操作。 支持自定义处理器,如果处理器返回值为undefined,启用默认合并。 该函数在对可选配置项与默认配置项进行合并时非常有用

该函数会修改目标对象

  • 当目标对象是null/undefined时,返回空对象
  • 当目标对象是基本类型时,返回对应的包装对象
  • 当目标对象是不可扩展/冻结/封闭状态时,返回目标对象

Example

//{x: 0, y: {a: 1, b: 2, c: 3, d: 4}}console.log(_.merge({x:1,y:{a:1,b:2}},{x:2,y:{c:5,d:4}},{x:0,y:{c:3}}))//[{x: 0, y: {a: 1, b: 2, c: 3, d: 4}}]console.log(_.merge([{x:1,y:{a:1,b:2}}],[{x:2,y:{c:5,d:4}}],[{x:0,y:{c:3}}]))

Since

0.22.0

Type parameters

NameType
Textends Record<UnknownMapKey, any>

Parameters

NameTypeDescription
targetT目标对象
...sourcesany1-n个源对象

Returns

T

返回target


mergeWith

mergeWith<T>(target, ...sources): T

merge相同,但支持自定义处理器

该函数会修改目标对象

Example

//{x: 2, y: {a: 2, b: 4, c: 3, d: 27}}console.log(_.mergeWith({x:1,y:{a:1,b:2,c:3}},{x:2,y:{a:2,d:3}},{y:{b:4}},(sv,tv,k)=>k=='d'?sv*9:undefined))

Since

0.22.0

Type parameters

NameType
Textends Record<UnknownMapKey, any>

Parameters

NameTypeDescription
targetT目标对象
...sourcesany1-n个源对象

Returns

T

返回target


omit

omit(obj, ...props): Record<UnknownMapKey, any>

创建一个剔除指定属性的对象子集并返回。与pick()刚好相反

Example

//{a: 1, c: '3'}console.log(_.omit({a:1,b:2,c:'3'},'b'))//{a: 1}console.log(_.omit({a:1,b:2,c:'3'},'b','c'))//{c: '3'}console.log(_.omit({a:1,b:2,c:'3'},['b','a']))

Since

0.16.0

Parameters

NameTypeDescription
objRecord<UnknownMapKey, any>选取对象
...props(string | string)属性集合

Returns

Record<UnknownMapKey, any>

对象子集


omitBy

omitBy<V, K>(obj, predicate?): Record<UnknownMapKey, any>

omit,但支持断言函数进行剔除

Example

//{c: '3'}console.log(_.omitBy({a:1,b:2,c:'3'},_.isNumber))

Since

0.23.0

Type parameters

NameType
VV
Kextends UnknownMapKey

Parameters

NameTypeDescription
objRecord<UnknownMapKey, any>选取对象
predicate?(v: V, k: K) => boolean(v,k)断言函数

Returns

Record<UnknownMapKey, any>

对象子集


pick

pick(obj, ...props): Record<UnknownMapKey, any>

创建一个指定属性的对象子集并返回

Example

//{b: 2}console.log(_.pick({a:1,b:2,c:'3'},'b'))//{b: 2,c:'3'}console.log(_.pick({a:1,b:2,c:'3'},'b','c'))//{a: 1, b: 2}console.log(_.pick({a:1,b:2,c:'3'},['b','a']))

Since

0.16.0

Parameters

NameTypeDescription
objRecord<UnknownMapKey, any>选取对象
...props(string | string)属性集合

Returns

Record<UnknownMapKey, any>

对象子集


pickBy

pickBy(obj, predicate?): Record<UnknownMapKey, any>

pick,但支持断言函数进行选取

Example

//{a: 1, b: 2}console.log(_.pickBy({a:1,b:2,c:'3'},_.isNumber))

Since

0.23.0

Parameters

NameTypeDescription
objRecord<UnknownMapKey, any>选取对象
predicate?(v: unknown, k: UnknownMapKey) => boolean(v,k)断言函数

Returns

Record<UnknownMapKey, any>

对象子集


prop

prop(path): (obj: Record<UnknownMapKey, any>) => any

创建一个函数,该函数返回指定对象的path属性值

Example

const libs = [ {name:'func.js',platform:['web','nodejs'],tags:{utils:true},js:false}, {name:'juth2',platform:['web','java'],tags:{utils:false,middleware:true},js:true}, {name:'soya2d',platform:['web'],tags:{utils:true},js:true}];//[true,false,true]console.log(_.map(libs,_.prop('tags.utils')))//nodejsconsole.log(_.prop(['platform',1])(libs[0]))

Since

0.17.0

Parameters

NameType
pathstring | string

Returns

fn

接收一个对象作为参数的函数

▸ (obj): any

Parameters
NameType
objRecord<UnknownMapKey, any>
Returns

any


set

set(obj, path, value): Record<UnknownMapKey, any>

通过path设置对象属性值。如果路径不存在则创建,索引会创建数组,属性会创建对象

该函数会修改源对象

Example

//{"a":1,"b":{"c":[undefined,{"x":10}]}}console.log(_.set({a:1},'b.c.1.x',10))

Since

0.16.0

Parameters

NameTypeDescription
objRecord<UnknownMapKey, any>需要设置属性值的对象,如果obj不是对象(isObject返回false),直接返回obj
pathstring | number | (string | number)属性路径,可以是索引数字,字符串key,或者多级属性数组
valueany任何值

Returns

Record<UnknownMapKey, any>

obj 修改后的源对象


toObject

toObject(...vals): Record<UnknownMapKey, any>

解析传递参数并返回一个根据参数值创建的Object实例。 支持数组对、k/v对、对象、混合方式等创建 是 toPairs 的反函数

Example

//{a:1,b:2}console.log(_.toObject('a',1,'b',2))//如果参数没有成对匹配,最后一个属性值则为undefined//{a:1,b:2,c:undefined}console.log(_.toObject('a',1,'b',2,'c'))//{a:1,b:4,c:3} 重复属性会覆盖console.log(_.toObject(['a',1,'b',2],['c',3],['b',4]))//{a:1,b:2} 对象类型返回cloneconsole.log(_.toObject({a:1,b:2}))//{1:now time,a:{}} 混合方式console.log(_.toObject([1,new Date],'a',{}))

Parameters

NameTypeDescription
...valsany对象创建参数,可以是一个数组/对象或者多个成对匹配的基本类型或者多个不定的数组/对象

Returns

Record<UnknownMapKey, any>

如果没有参数返回空对象


toPairs

toPairs(obj): any[]

返回指定对象的所有key,value组成的二维数组

Example

//[['a', 1], ['b', 2], ['c', 3]]console.log(_.toPairs({a:1,b:2,c:3}))

Parameters

NameType
objRecord<UnknownMapKey, any>

Returns

any[]

二维数组


unset

unset(obj, path): boolean

删除obj上path路径对应属性

Since

2.3

Parameters

NameTypeDescription
objRecord<UnknownMapKey, any>需要设置属性值的对象,如果obj不是对象(isObject返回false),直接返回obj
pathstring | number | (string | number)属性路径,可以是索引数字,字符串key,或者多级属性数组

Returns

boolean

成功返回true,失败或路径不存在返回false


values

values(obj): any

返回对象的所有value数组

只返回对象的自身可枚举属性

Example

let f = new Function("this.a=1;this.b=2;");f.prototype.c = 3;//[1,2]console.log(_.values(new f()))

Parameters

NameType
objRecord<UnknownMapKey, any>

Returns

any

对象根属性对应的值列表


valuesIn

valuesIn(obj): any

返回对象的所有value数组 包括原型链中的属性

Example

let f = new Function("this.a=1;this.b=2;");f.prototype.c = 3;//[1,2,3]console.log(_.valuesIn(new f()))

Parameters

NameType
objRecord<UnknownMapKey, any>

Returns

any

对象根属性对应的值列表