Teal TealUI

对象扩展util/object

提供 JavaScript 内置对象 Object 的扩展接口。

API

函数 描述
assignIf(target, source)<T, R>(target:T, source:R):T & R

复制源对象的所有可枚举属性到目标对象,如果目标对象中对应的属性值不是 undefined 则跳过。

泛型参数 约束类型 默认类型
T
R
参数 类型 描述 默认值
target* T
source* R

返回值

类型:T & R

返回目标对象。

示例

assignIf({a: 1}, {a: 2, b: 2}) // {a: 1, b: 2}

复制源对象的所有可枚举属性到目标对象,如果目标对象中对应的属性值不是 undefined 则跳过。

getPropertyDescriptor(obj, key)(obj:any, key:string):PropertyDescriptor

获取对象自身或原型上的属性描述符。

参数 类型 描述 默认值
obj* any
key* string

返回值

类型:PropertyDescriptor

返回对象描述器。如果找不到则返回 undefined。

获取对象自身或原型上的属性描述符。

insertBefore(obj, newKey, newValue, ...)<T>(obj:T, newKey:string, newValue:any, refKey?:keyof T):void

在对象指定的键之前插入一个键值对。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* T
newKey* string
newValue* any
refKey keyof T

返回值

类型:void

示例

insertBefore({ a: 1 }, "b", 2, "a") // { b:2, a: 1 }

在对象指定的键之前插入一个键值对。

each(obj, callback, ...)<T>(obj:ArrayLike<T> | object, callback:function, thisArg?:any):boolean(2 重载)

对类数组的每一项执行一次回调函数。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (value: T, index: number, target: ArrayLike<T>) => boolean | void
thisArg any

返回值

类型:boolean

如果循环是因为回调函数返回 false 而中止,则返回 false,否则返回 true。

示例

each(["a", "b"], console.log, console); // 打印“0  a”和“1  b”

对对象(函数除外)的每一项执行一次回调函数。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (value: T, key: string, obj: { [key: string]: T; }) => boolean | void
thisArg any

返回值

类型:boolean

如果循环是因为回调函数返回 false 而中止,则返回 false,否则返回 true。

示例

each({a: 1, b: 2}, console.log, console); // 打印“a  1”和“b  2”

对类数组的每一项执行一次回调函数。

forEach(obj, callback, ...)<T>(obj:ArrayLike<T> | object, callback:function, thisArg?:any):void(2 重载)

对类数组的每一项执行一次回调函数。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (value: T, index: number, target: ArrayLike<T>) => boolean | void
thisArg any

返回值

类型:void

示例

forEach(["a", "b"], console.log, console) // 打印“0  a”和“1  b”

对对象(函数除外)的每一项执行一次回调函数。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (value: T, key: string, obj: { [key: string]: T; }) => boolean | void
thisArg any

返回值

类型:void

示例

forEach({a: 1, b: 2}, console.log, console) // 打印“a  1”和“b  2”

对类数组的每一项执行一次回调函数。

filter(obj, callback, ...)<T>(obj:ArrayLike<T> | object, callback:function, thisArg?:any):T[] | object(2 重载)

筛选类数组中符合条件的项并组成一个新数组。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (value: T, index: number, target: ArrayLike<T>) => boolean
thisArg any

返回值

类型:{ [key: string]: T; }

返回一个新数组。

示例

filter([1, 2], function (item) { return item > 1; }) // [2]

筛选对象(函数除外)中符合条件的项并组成一个新对象。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (value: T, key: string, obj: { [key: string]: T; }) => boolean
thisArg any

返回值

类型:{ [key: string]: T; }

返回一个新对象。

示例

filter({a: 1, b: 2}, function (item) { return item > 1; }) // {b: 2}

筛选类数组中符合条件的项并组成一个新数组。

map(obj, callback, ...)<T, R>(obj:ArrayLike<T> | object, callback:function, thisArg?:any):R[] | object(2 重载)

对类数组的每一项执行一次回调函数,然后将每个结果组成新数组。

泛型参数 约束类型 默认类型
T
R
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (value: T, index: number, target: ArrayLike<T>) => R
thisArg any

返回值

类型:R[]

返回一个新数组。

示例

map(["a", "b"], function (a) { return a + a; }) // ["aa", "bb"]

对对象(函数除外)的每一项执行一次回调函数,然后将每个结果组成新数组。

泛型参数 约束类型 默认类型
T
R
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (value: T, key: string, obj: { [key: string]: T; }) => R
thisArg any

返回值

类型:{ [key: string]: R; }

返回一个新对象。

示例

map({length: 1, "0": "a"}, function (a) { return a + a; }) // ["a"]
map({a: "a", b: "b"}, function (a) { return a + a; }) // {a: "aa", b: "bb"}

对类数组的每一项执行一次回调函数,然后将每个结果组成新数组。

every(obj, callback, ...)<T>(obj:ArrayLike<T> | object, callback:function, thisArg?:any):boolean(2 重载)

判断类数组的每一项是否都符合条件。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (value: T, index: number, target: ArrayLike<T>) => boolean
thisArg any

返回值

类型:boolean

如果所有项满足条件则返回 true,否则返回 false。

示例

every([1, 2], function (item) { return item > 0; }) // true
every([1, 2], function (item) { return item > 1; }) // false
every([1, 2], function (item) { return item > 2; }) // false

判断对象(函数除外)的每一项是否都符合条件。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (value: T, key: string, obj: { [key: string]: T; }) => boolean
thisArg any

返回值

类型:boolean

如果所有项满足条件则返回 true,否则返回 false。

示例

every({a: 1, b: 2}, function (item) { return item > 0; }) // true
every({a: 1, b: 2}, function (item) { return item > 1; }) // false
every({a: 1, b: 2}, function (item) { return item > 2; }) // false

判断类数组的每一项是否都符合条件。

some(obj, callback, ...)<T>(obj:ArrayLike<T> | object, callback:function, thisArg?:any):boolean(2 重载)

判断类数组中是否存在一项或多项符合条件。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (value: T, index: number, target: ArrayLike<T>) => boolean
thisArg any

返回值

类型:boolean

如果至少存在一项满足条件则返回 true,否则返回 false。

示例

some([1, 2], function (item) { return item > 0; }) // true
some([1, 2], function (item) { return item > 1; }) // true
some([1, 2], function (item) { return item > 2; }) // false

判断对象(函数除外)中是否存在一项或多项符合条件。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (value: T, key: string, obj: { [key: string]: T; }) => boolean
thisArg any

返回值

类型:boolean

如果至少存在一项满足条件则返回 true,否则返回 false。

示例

some({a: 1, b: 2}, function (item) { return item > 1; }) // true
some({a: 1, b: 2}, function (item) { return item > 1; }) // true
some({a: 1, b: 2}, function (item) { return item > 2; }) // false

判断类数组中是否存在一项或多项符合条件。

find(obj, callback, ...)<T>(obj:ArrayLike<T> | object, callback:function, thisArg?:any):T(2 重载)

找出类数组中符合条件的第一项。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (value: T, index: number, target: ArrayLike<T>) => boolean
thisArg any

返回值

类型:T

返回符合条件的第一项,如果找不到则返回 undefined。

示例

find([1, 2], function (item) { return item > 1; }) // 2

找出对象(函数除外)中符合条件的第一项。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (value: T, key: string, obj: { [key: string]: T; }) => boolean
thisArg any

返回值

类型:T

返回符合条件的第一项,如果找不到则返回 undefined。

示例

find({a: 1, b: 2}, function (item) { return item > 1; }) // 2

找出类数组中符合条件的第一项。

findIndex(obj, callback, ...)<T>(obj:ArrayLike<T> | object, callback:function, thisArg?:any):string | number(2 重载)

找出类数组中符合条件的第一项的索引。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (value: T, index: number, target: ArrayLike<T>) => boolean
thisArg any

返回值

类型:number

返回符合条件的第一项的索引,如果找不到则返回 -1。

示例

findIndex([1, 2], function (item){ return item > 1; }) // 1
findIndex([1, 2], function (item){ return item > 2; }) // -1

找出指定对象(函数除外)中符合条件的第一项的键。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (value: T, key: string, obj: { [key: string]: T; }) => boolean
thisArg any

返回值

类型:string

返回符合条件的第一项的键,如果找不到则返回 null。

示例

findIndex({a: 1, b: 2}, function (item){return item > 1;}) // 'b'
findIndex({a: 1, b: 2}, function (item){return item > 2;}) // undefined

找出类数组中符合条件的第一项的索引。

reduce(obj, callback, ...)<T, R>(obj:ArrayLike<T> | object, callback:function, initialValue?:R, thisArg?:any):R(2 重载)

从左往右依次合并类数组中的每一项并最终返回一个值。

泛型参数 约束类型 默认类型
T
R
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (previousValue: R, currentValue: T, index: number, target: ArrayLike<T>) => R
initialValue R
thisArg any

返回值

类型:R

返回合并后的最终结果值。

示例

reduce([1, 2], function (x, y) { return x + y; }) // 3
reduce([1, 2], function (x, y) { return x + y; }, 10) // 13

从左往右依次合并对象(函数除外)中的每一项并最终返回一个值。

泛型参数 约束类型 默认类型
T
R
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (previousValue: R, currentValue: T, key: string, obj: { [key: string]: T; }) => R
initialValue R
thisArg any

返回值

类型:R

返回合并后的最终结果值。

示例

reduce({a: 1, b: 2}, function (x, y) { return x + y; }) // 3
reduce({a: 1, b: 2}, function (x, y) { return x + y; }, 10) // 13

从左往右依次合并类数组中的每一项并最终返回一个值。

reduceRight(obj, callback, ...)<T, R>(obj:ArrayLike<T> | object, callback:function, initialValue?:R, thisArg?:any):R(2 重载)

从右往左依次合并类数组中的每一项并最终返回一个值。

泛型参数 约束类型 默认类型
T
R
参数 类型 描述 默认值
obj* ArrayLike<T>
callback* (previousValue: R, currentValue: T, index: number, target: ArrayLike<T>) => R
initialValue R
thisArg any

返回值

类型:R

返回合并后的最终结果值。

示例

reduceRight([1, 2], function (x, y) { return x + y; }) // 3
reduceRight([1, 2], function (x, y) { return x + y; }, 10) // 13

从右往左依次合并对象(函数除外)中的每一项并最终返回一个值。

泛型参数 约束类型 默认类型
T
R
参数 类型 描述 默认值
obj* { [key: string]: T; }
callback* (previousValue: R, currentValue: T, key: string, obj: { [key: string]: T; }) => R
initialValue R
thisArg any

返回值

类型:R

返回合并后的最终结果值。

示例

reduceRight({a: 1, b: 2}, function (x, y) { return x + y; }) // 3
reduceRight({a: 1, b: 2}, function (x, y) { return x + y; }, 10) // 13

从右往左依次合并类数组中的每一项并最终返回一个值。

contains(obj, value, ...)<T>(obj:ArrayLike<T> | object, value:T, start?:string | number):boolean(2 重载)

判断类数组中是否包含指定的项。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* ArrayLike<T>
value* T
start number

返回值

类型:boolean

如果找到匹配的项则返回 true,否则返回 false。

示例

contains([1, 2, 3], 3) // true
contains([1, 2, 3], 4) // false

判断对象(函数除外)中是否包含指定的项。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* { [key: string]: T; }
value* T
start string

返回值

类型:boolean

如果找到匹配的项则返回 true,否则返回 false。

示例

contains({a: 1, b: 2, c: 3}, 3) // true
contains({a: 1, b: 2, c: 3}, 4) // false

判断类数组中是否包含指定的项。

subset(obj, keys)<T>(obj:object | object, keys:(string | number)[]):object

获取对象包含指定键的子对象。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* { [key: number]: T; } | { [key: string]: T; }
keys* (string | number)[]

返回值

类型:{ [key: string]: T; }

返回新对象。

示例

subset({a: 1, b: 2}, ["a"]) // {a: 1}

获取对象包含指定键的子对象。

invert(obj)(obj:object):object

将对象的键和值对换组成新对象。

参数 类型 描述 默认值
obj* { [key: string]: any; }

返回值

类型:{ [key: string]: any; }

返回新对象。

示例

invert({a: 1, b: 2, c: 3}) // { 1: "a", 2: "b", 3: "c" }

将对象的键和值对换组成新对象。

isObject(obj)(obj:any):boolean

判断一个对象是否是引用对象。

参数 类型 描述 默认值
obj* any

返回值

类型:boolean

如果对象是引用对象则返回 true,否则返回 false。

说明

此函数等效于 obj !== null && typeof obj === "object"

示例

isObject({}) // true
isObject(null) // false

判断一个对象是否是引用对象。

type(obj)(obj:any):string

获取对象的类型名。

参数 类型 描述 默认值
obj* any

返回值

类型:"string" | "number" | "boolean" | "undefined" | "object" | "function" | "null" | "array" | "date" | "regexp" | "error"

返回类型名。

示例

type(null) // "null"
type(undefined) // "undefined"
type(new Function) // "function"
type(+'a') // "number"
type(/a/) // "regexp"
type([]) // "array"

获取对象的类型名。

count(obj)(obj:any):number

计算对象自身的可枚举属性数。

参数 类型 描述 默认值
obj* any

返回值

类型:number

返回对象自身的可枚举属性数,原型上的属性会被忽略。

示例

size({a: 1, b: 2}) // 2
size([0, 1]) // 2

计算对象自身的可枚举属性数。

isEmpty(obj)(obj:any):boolean

判断对象是否为 null、undefined、空字符串、空数组或空对象。

参数 类型 描述 默认值
obj* any

返回值

类型:boolean

如果对象是 null、undefined、false、空字符串、空数组或空对象,则返回 true,否则返回 false。

示例

isEmpty(null) // true
isEmpty(undefined) // true
isEmpty("") // true
isEmpty(" ") // false
isEmpty([]) // true
isEmpty({}) // true

判断对象是否为 null、undefined、空字符串、空数组或空对象。

clone(obj)<T>(obj:T):any

浅拷贝指定的对象。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* T

返回值

类型:any

返回拷贝得到的新对象,该对象和原对象无引用关系。

说明

出于性能考虑,此函数不会拷贝函数和正则表达式。

示例

clone({a: 3, b: [5]}) // {a: 3, b: [5]}

浅拷贝指定的对象。

deepClone(obj, ...)<T>(obj:T, replacer?:function, cloned?:any[], clonedResult?:any[]):any

深拷贝一个对象。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* T
replacer (obj: any) => any
cloned any[] []
clonedResult any[] []

返回值

类型:any

返回拷贝得到的新对象,该对象的每个层级和原对象都无引用关系。

说明

出于性能考虑,此函数不会拷贝函数和正则表达式。

示例

deepCloneSafe({a: 3, b: [5]}) // {a: 3, b: [5]}

深拷贝一个对象。

deepCloneFast(obj, ...)<T>(obj:T, replacer?:function, depth?:number):T

深拷贝一个对象。不支持存在循环引用的对象。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* T
replacer (obj: any) => any
depth number Infinity

返回值

类型:T

返回拷贝得到的新对象,该对象的每个层级和原对象都无引用关系。

说明

出于性能考虑,此函数不会拷贝函数和正则表达式。

示例

deepClone({a: 3, b: [5]}) // {a: 3, b: [5]}

深拷贝一个对象。不支持存在循环引用的对象。

deepEqual(obj1, obj2)(obj1:any, obj2:any):boolean

比较两个引用对象的内容是否相同。

参数 类型 描述 默认值
obj1* any
obj2* any

返回值

类型:boolean

如果比较的对象完全相同则返回 true,否则返回 false。

示例

deepEqual([], []) // true

比较两个引用对象的内容是否相同。

diff(obj1, obj2)(obj1:any, obj2:any):object

浅比较两个对象的差异。

参数 类型 描述 默认值
obj1* any
obj2* any

返回值

类型:{ left: string[]; right: string[]; both: string[]; }

返回包含差异信息的对象。该对象列出了只在其中某个对象存在的属性值和公共的属性值。

示例

diff({ a:1, c: 1 }, { b: 1, c: 2 }) // { left: ["a"], right: ["b"], both: ["c"] }

浅比较两个对象的差异。

deepDiff(obj1, obj2, ...)(obj1:any, obj2:any, depth?:number):object

深比较两个对象的差异。

参数 类型 描述 默认值
obj1* any
obj2* any
depth number Infinity

返回值

类型:{ left: string[]; right: string[]; both: string[]; }

返回包含差异信息的对象。该对象列出了只在其中某个对象存在的属性值和公共的属性值。

示例

deepDiff({ a:1, c: 1 }, { b: 1, c: 2 }) // {left: ["a"], right: ["b"], both: ["c"]}

深比较两个对象的差异。

clean(obj)(obj:object):object

删除对象中值为 null 或 undefined 的键。

参数 类型 描述 默认值
obj* { [key: string]: any; }

返回值

类型:{ [key: string]: any; }

返回原对象。

示例

clean({a: undefined, b: null, c: 3}) // {c: 3}

删除对象中值为 null 或 undefined 的键。

select(obj, ...)(obj:object, ...keys:string[]):object

返回对象中指定键组成的新对象。

参数 类型 描述 默认值
obj* { [key: string]: any; }
keys string[]

返回值

类型:{ [key: string]: any; }

返回新对象。

示例

select({a: 1, b: 2, c: 3}, "a",  "c") // {a: 1, c: 3}

返回对象中指定键组成的新对象。

pick(...)(...values:any[]):any

查找所有参数中第一个不为 undefined 和 null 的值。

参数 类型 描述 默认值
values any[]

返回值

类型:any

返回第一个不为 undefined 和 null 的值。如果找不到则返回 undefined。

示例

pick(undefined, null, 1) // 1

查找所有参数中第一个不为 undefined 和 null 的值。

keyOf(obj, value)(obj:any, value:any):string

查找对象中指定值对应的第一个键。

参数 类型 描述 默认值
obj* any
value* any

返回值

类型:string

返回匹配的第一个键,如果找不到则返回 null。

示例

keyOf({a:1, b:1}, 1) // "a"

查找对象中指定值对应的第一个键。

get(obj, prop)(obj:any, prop:string):any

获取对象指定属性的值。

参数 类型 描述 默认值
obj* any
prop* string

返回值

类型:any

返回属性值。如果属性不存在则返回 undefined。

示例

get({a: {b: 1}}, "a.b") // 1

获取对象指定属性的值。

set(obj, prop, value)(obj:any, prop:string, value:any):void

设置对象指定属性的值。

参数 类型 描述 默认值
obj* any
prop* string
value* any

返回值

类型:void

示例

set({}, "a[1].b", 2) // { a: [undefined, { b: 2 }]}

设置对象指定属性的值。

setProperty(obj, key, value)(obj:any, key:string, value:any):void

强制覆盖对象的属性值。

参数 类型 描述 默认值
obj* any
key* string
value* any

返回值

类型:void

示例

setProperty({myKey: "oldValue"}, "myKey", "newValue")

强制覆盖对象的属性值。

addCallback(obj, key, callback)<T>(obj:T, key:keyof T, callback:Function):void

添加调用指定成员函数后的回调函数。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* T
key* keyof T
callback* Function

返回值

类型:void

示例

var obj = { func: function() { console.log(1); } };
addCallback(obj, "func", function() { console.log(2); } )
obj.func(); // 输出 1, 2

添加调用指定成员函数后的回调函数。

addSetCallback(obj, key, callback)<T>(obj:T, key:keyof T, callback:function):void

添加设置指定属性后的回调函数。

泛型参数 约束类型 默认类型
T
参数 类型 描述 默认值
obj* T
key* keyof T
callback* (this: T, value: any) => void

返回值

类型:void

添加设置指定属性后的回调函数。