©
本文档使用 PHP中文网手册 发布
将源对象的可枚举字符串键属性分配给目标对象。源对象从左到右应用。后续来源将覆盖之前来源的属性分配。
注意: 此方法变异object
并且松散地基于Object.assign
。
0.10.0
object
(对象):目标对象。
[sources]
(...对象):源对象。
(对象):返回object
。
function Foo() { this.a = 1;} function Bar() { this.c = 3;} Foo.prototype.b = 2; Bar.prototype.d = 4; _.assign({ 'a': 0 }, new Foo, new Bar); // => { 'a': 1, 'c': 3 }
这个方法就像_.assign
它遍历自己的和继承的源属性。
注意:此方法发生变化object
。
4.0.0
_.extend
object
(对象):目标对象。
[sources]
(...对象):源对象。
(对象):返回object
。
function Foo() { this.a = 1;} function Bar() { this.c = 3;} Foo.prototype.b = 2; Bar.prototype.d = 4; _.assignIn({ 'a': 0 }, new Foo, new Bar); // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
这种方法就像_.assignIn
是接受customizer
调用它来产生分配的值。如果customizer
返回undefined
,则赋值由该方法处理。该customizer
被调用,五个参数:(objValue,srcValue,键,对象,源)。
注意:此方法发生变化object
。
版本
4.0.0
_.extendWith
object
(对象):目标对象。
sources
(...对象):源对象。
[customizer]
(功能):自定义指定值的功能。
(对象):返回object
。
function customizer(objValue, srcValue) { return _.isUndefined(objValue) ? srcValue : objValue;} var defaults = _.partialRight(_.assignInWith, customizer); defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); // => { 'a': 1, 'b': 2 }
这种方法就像_.assign
是接受customizer
调用它来产生分配的值。如果customizer
返回undefined
,则赋值由该方法处理。该customizer
被调用,五个参数:(objValue,srcValue,键,对象,源)。
注意:此方法发生变化object
。
4.0.0
object
(对象):目标对象。
sources
(...对象):源对象。
[customizer]
(功能):自定义指定值的功能。
(对象):返回object
。
function customizer(objValue, srcValue) { return _.isUndefined(objValue) ? srcValue : objValue;} var defaults = _.partialRight(_.assignWith, customizer); defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); // => { 'a': 1, 'b': 2 }
创建对应于paths
的值的数组object
。
版本
1.0.0
object
(Object):迭代的对象。
[paths]
(...(string | string [])):要选择的属性路径。
(数组):返回采集的值。
var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; _.at(object, ['a[0].b.c', 'a[1]']);// => [3, 4]
创建一个从prototype
对象继承的对象。如果properties
给定一个对象,则将其自己的可枚举字符串键控属性分配给创建的对象。
版本
2.3.0
prototype
(Object):要继承的对象。
[properties]
(对象):要分配给对象的属性。
(Object):返回新的对象。
function Shape() { this.x = 0; this.y = 0;} function Circle() { Shape.call(this);} Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle}); var circle = new Circle;circle instanceof Circle;// => true circle instanceof Shape;// => true
将源对象的自身和继承的可枚举字符串键控属性分配给所有要解析为的目标属性的目标对象undefined
。源对象从左到右应用。一旦设置了属性,相同属性的其他值将被忽略。
注意:此方法发生变化object
。
0.1.0
object
(对象):目标对象。
[sources]
(...对象):源对象。
(对象):返回object
。
_.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); // => { 'a': 1, 'b': 2 }
此方法与_.defaults
递归分配默认属性不同。
注意:此方法发生变化object
。
3.10.0
object
(对象):目标对象。
[sources]
(...对象):源对象。
(对象):返回object
。
_.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); // => { 'a': { 'b': 2, 'c': 3 } }
这个方法就像_.find
是它返回第一个元素的键 predicate
返回truthy而不是元素本身。
1.1.0
object
(对象):要检查的对象。
[predicate=_.identity]
(Function):每次迭代调用的函数。
(*):返回匹配元素的关键字else undefined
。
var users = { 'barney': { 'age': 36, 'active': true }, 'fred': { 'age': 40, 'active': false }, 'pebbles': { 'age': 1, 'active': true }}; _.findKey(users, function(o) { return o.age < 40; }); // => 'barney' (iteration order is not guaranteed) // The `_.matches` iteratee shorthand. _.findKey(users, { 'age': 1, 'active': true }); // => 'pebbles' // The `_.matchesProperty` iteratee shorthand. _.findKey(users, ['active', false]); // => 'fred' // The `_.property` iteratee shorthand. _.findKey(users, 'active'); // => 'barney'
这个方法就像_.findKey
是它以相反的顺序遍历一个集合的元素。
2.0.0
object
(对象):要检查的对象。
[predicate=_.identity]
(Function):每次迭代调用的函数。
(*):返回匹配元素的关键字else undefined
。
var users = { 'barney': { 'age': 36, 'active': true }, 'fred': { 'age': 40, 'active': false }, 'pebbles': { 'age': 1, 'active': true }}; _.findLastKey(users, function(o) { return o.age < 40; }); // => returns 'pebbles' assuming ` _.findKey` returns 'barney' // The `_.matches` iteratee shorthand. _.findLastKey(users, { 'age': 36, 'active': true }); // => 'barney' // The `_.matchesProperty` iteratee shorthand. _.findLastKey(users, ['active', false]); // => 'fred' // The `_.property` iteratee shorthand. _.findLastKey(users, 'active'); // => 'pebbles'
迭代对象的自己和继承的可枚举字符串键控属性,并iteratee
为每个属性调用。迭代器被调用三个参数:(value,key,object)。迭代器函数可以通过显式返回提前退出迭代false
。
0.3.0
object
(Object):迭代的对象。
[iteratee=_.identity]
(Function):每次迭代调用的函数。
(对象):返回object
。
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.forIn(new Foo, function(value, key) { console.log(key);}); // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
这个方法就像_.forIn
是它object
以相反的顺序迭代属性 。
2.0.0
object
(Object):迭代的对象。
[iteratee=_.identity]
(Function):每次迭代调用的函数。
(Object): Returns object
.
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.forInRight(new Foo, function(value, key) { console.log(key);}); // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
迭代对象的自身枚举字符串键控属性并iteratee
为每个属性调用。迭代器被调用三个参数:(value,key,object)。迭代器函数可以通过显式返回提前退出迭代false
。
0.3.0
object
(Object):迭代的对象。
[iteratee=_.identity]
(Function):每次迭代调用的函数。
(对象):返回object
。
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.forOwn(new Foo, function(value, key) { console.log(key);});// => Logs 'a' then 'b' (iteration order is not guaranteed).
这个方法就像_.forOwn
是它object
以相反的顺序迭代属性。
2.0.0
object
(Object):迭代的对象。
[iteratee=_.identity]
(Function):每次迭代调用的函数。
(对象):返回object
。
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.forOwnRight(new Foo, function(value, key) { console.log(key);});// => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
从自己的可枚举属性中创建一个函数属性名称数组object
。
0.1.0
object
(对象):要检查的对象。
(数组):返回函数名称。
function Foo() { this.a = _.constant('a'); this.b = _.constant('b');} Foo.prototype.c = _.constant('c'); _.functions(new Foo);// => ['a', 'b']
从自己的继承的可枚举属性创建一个函数属性名称数组object
。
4.0.0
object
(对象):要检查的对象。
(数组):返回函数名称。
function Foo() { this.a = _.constant('a'); this.b = _.constant('b');} Foo.prototype.c = _.constant('c'); _.functionsIn(new Foo);// => ['a', 'b', 'c']
获取path
of 的值object
。如果解决的值是undefined
, defaultValue
则返回原位。
3.7.0
object
(Object):要查询的对象。
path
(Array | string):要获取的属性的路径。
[defaultValue]
(*):返回undefined
解析值的值。
(*):返回已解析的值。
var object = { 'a': [{ 'b': { 'c': 3 } }] }; _.get(object, 'a[0].b.c');// => 3 _.get(object, ['a', '0', 'b', 'c']);// => 3 _.get(object, 'a.b.c', 'default');// => 'default'
检查是否path
是否含有object
。
版本
0.1.0
object
(Object):要查询的对象。
path
(数组|字符串):要检查的路径。
(boolean):返回true
是否path
存在,否则false
。
var object = { 'a': { 'b': 2 } };var other = _.create({ 'a': _.create({ 'b': 2 }) }); _.has(object, 'a');// => true _.has(object, 'a.b');// => true _.has(object, ['a', 'b']);// => true _.has(other, 'a');// => false
检查是否path
是直接或继承的属性object
。
4.0.0
object
(Object):要查询的对象。
path
(数组|字符串):要检查的路径。
(boolean):返回true
是否path
存在,否则false
。
var object = _.create({ 'a': _.create({ 'b': 2 }) }); _.hasIn(object, 'a');// => true _.hasIn(object, 'a.b');// => true _.hasIn(object, ['a', 'b']);// => true _.hasIn(object, 'b');// => false
创建一个由倒置键和值组成的对象object
。如果object
包含重复值,则后续值将覆盖以前值的属性分配。
0.7.0
object
(对象):要反转的对象。
(Object):返回新的倒置对象。
var object = { 'a': 1, 'b': 2, 'c': 1 }; _.invert(object);// => { '1': 'c', '2': 'b' }
这种方法是等_.invert
不同之处在于,从运行中的每个元素的结果所产生的反转对象object
通iteratee
。每个反转键的相应反转值是负责产生反转值的键数组。迭代器被调用一个参数:(value)。
4.1.0
object
(对象):要反转的对象。
[iteratee=_.identity]
(Function):每个元素调用的迭代器。
(Object):返回新的倒置对象。
var object = { 'a': 1, 'b': 2, 'c': 1 }; _.invertBy(object);// => { '1': ['a', 'c'], '2': ['b'] } _.invertBy(object, function(value) { return 'group' + value;}); // => { 'group1': ['a', 'c'], 'group2': ['b'] }
调用path
of 处的方法object
。
4.0.0
object
(Object):要查询的对象。
path
(Array | string):要调用的方法的路径。
[args]
(... *):用来调用方法的参数。
(*): Returns the result of the invoked method.
var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; _.invoke(object, 'a[0].b.c.slice', 1, 3);// => [2, 3]
创建一个自己的可枚举属性名称的数组object
。
注意: 非对象值被强制转换为对象。有关更多详细信息,请参阅ES规范。
0.1.0
object
(Object):要查询的对象。
(Array):返回属性名称的数组。
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.keys(new Foo);// => ['a', 'b'] (iteration order is not guaranteed) _.keys('hi');// => ['0', '1']
创建一个自己的继承的可枚举属性名称的数组 object
。
注意:非对象值被强制转换为对象。
3.0.0
object
(Object):要查询的对象。
(Array):返回属性名称的数组。
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.keysIn(new Foo);// => ['a', 'b', 'c'] (iteration order is not guaranteed)
与之相反_.mapValues
; 此方法创建一个具有与object
通过运行object
thru的每个自己的可枚举字符串键控属性生成的键值 相同的值的对象iteratee
。迭代器被调用三个参数:(value,key,object)。
3.8.0
object
(Object):迭代的对象。
[iteratee=_.identity]
(Function):每次迭代调用的函数。
(Object):返回新的映射对象。
_.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { return key + value;}); // => { 'a1': 1, 'b2': 2 }
使用与object
通过运行object
thru的每个自己的可枚举字符串键控属性所生成的相同的键和值创建一个对象iteratee
。迭代器被调用三个参数:
(value, key, object).
2.4.0
object
(Object):迭代的对象。
[iteratee=_.identity]
(Function):每次迭代调用的函数。
(Object):返回新的映射对象。
var users = { 'fred': { 'user': 'fred', 'age': 40 }, 'pebbles': { 'user': 'pebbles', 'age': 1 }}; _.mapValues(users, function(o) { return o.age; }); // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) // The `_.property` iteratee shorthand._.mapValues(users, 'age'); // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
这种方法就像_.assign
是递归地将源对象的自己和继承的可枚举字符串键控属性合并到目标对象中。undefined
如果目标值存在,则解析为跳过的源属性 。数组和简单对象属性是递归合并的。其他对象和值类型被赋值覆盖。源对象从左到右应用。后续来源将覆盖之前来源的属性分配。
注意:此方法发生变化object
。
0.5.0
object
(对象):目标对象。
[sources]
(...对象):源对象。
(对象):返回object
。
var object = { 'a': [{ 'b': 2 }, { 'd': 4 }]}; var other = { 'a': [{ 'c': 3 }, { 'e': 5 }]}; _.merge(object, other);// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
此方法类似,_.merge
只是它接受customizer
调用它来生成目标和源属性的合并值。如果customizer
返回 undefined
,则合并由该方法处理。该customizer
调用有六个参数:
(objValue, srcValue, key, object, source, stack).
注意:此方法发生变化object
。
4.0.0
object
(对象):目标对象。
sources
(...对象):源对象。
customizer
(功能):自定义指定值的功能。
(对象):返回object
。
function customizer(objValue, srcValue) { if (_.isArray(objValue)) { return objValue.concat(srcValue); }} var object = { 'a': [1], 'b': [2] }; var other = { 'a': [3], 'b': [4] }; _.mergeWith(object, other, customizer); // => { 'a': [1, 3], 'b': [2, 4] }
与之相反_.pick
; 此方法创建一个由自己和继承的枚举属性路径组成的对象,这些路径object
不会被省略。
注意:这个方法比_.pick
慢
0.1.0
object
(对象):源对象。
[paths]
(...(string | string [])):要忽略的属性路径。
(Object):返回新的对象。
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.omit(object, ['a', 'c']);// => { 'b': '2' }
与之相反_.pickBy
; 此方法创建自己组成的对象和继承的枚举字符串键的属性object
是predicate
不返回truthy的。谓词用两个参数调用:(value,key)。
4.0.0
object
(对象):源对象。
[predicate=_.identity]
(Function):每个属性调用的函数。
(Object):返回新的对象。
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.omitBy(object, _.isNumber);// => { 'b': '2' }
创建一个由拾取object
属性组成的对象。
0.1.0
object
(对象):源对象。
[paths]
(...(string | string [])):要选择的属性路径。
(Object):返回新的对象。
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pick(object, ['a', 'c']);// => { 'a': 1, 'c': 3 }
创建一个由object
属性predicate
返回truthy 组成的对象。谓词用两个参数调用:(value,key)。
4.0.0
object
(对象):源对象。
[predicate=_.identity]
(Function):每个属性调用的函数。
(Object):返回新的对象。
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pickBy(object, _.isNumber);// => { 'a': 1, 'c': 3 }
这种方法就像是_.get
,如果解析的值是一个函数,它的this
父对象的绑定将被调用,并返回结果。
0.1.0
object
(Object):要查询的对象。
path
(Array | string):要解析的属性的路径。
[defaultValue]
(*):返回undefined
解析值的值。
(*):返回已解析的值。
var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; _.result(object, 'a[0].b.c1');// => 3 _.result(object, 'a[0].b.c2');// => 4 _.result(object, 'a[0].b.c3', 'default');// => 'default' _.result(object, 'a[0].b.c3', _.constant('default'));// => 'default'
设置在价值path
的object
。如果一部分path
不存在,则创建它。为缺少索引属性创建数组,而为所有其他缺少的属性创建对象。使用_.setWith
自定义path
创建。
注意:此方法发生变化object
。
3.7.0
object
(对象):要修改的对象。
path
(Array | string):要设置的属性的路径。
value
(*):要设置的值。
(对象):返回object
。
var object = { 'a': [{ 'b': { 'c': 3 } }] }; _.set(object, 'a[0].b.c', 4); console.log(object.a[0].b.c);// => 4 _.set(object, ['x', '0', 'y', 'z'], 5); console.log(object.x[0].y.z);// => 5
这个方法类似于_.set
它接受customizer
被调用来产生对象的方法path
。如果customizer
返回undefined
路径创建是由方法处理的。该customizer
调用有三个参数:(nsValue,key,nsObject)。
注意:此方法发生变化object
。
4.0.0
object
(对象):要修改的对象。
path
(Array | string):要设置的属性的路径。
value
(*):要设置的值。
[customizer]
(功能):自定义指定值的功能。
(对象):返回object
。
var object = {}; _.setWith(object, '[0][1]', 'a', Object); // => { '0': { '1': 'a' } }
创建一个可object
由其使用的自己可枚举的字符串键控值对的数组_.fromPairs
。如果object
是地图或集合,则返回其条目。
4.0.0
_.entries
object
(Object):要查询的对象。
(数组):返回键值对。
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.toPairs(new Foo); // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
创建一个自己的和继承的可枚举的字符串键值对的数组,供object
其使用_.fromPairs
。如果object
是地图或集合,则返回其条目。
4.0.0
_.entriesIn
object
(Object):要查询的对象。
(数组):返回键值对。
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.toPairsIn(new Foo);// => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
替代方案_.reduce
; 这个方法转换object
为一个新的 accumulator
对象,这个对象是通过运行每个自己的可枚举字符串键控属性的结果iteratee
,每个调用都可能会突变accumulator
对象。如果accumulator
没有提供,[[Prototype]]
将使用一个相同的新对象。迭代器被调用四个参数:( 累加器,值,键,对象)。迭代器函数可以通过显式返回提前退出迭代false
。
1.3.0
object
(Object):迭代的对象。
[iteratee=_.identity]
(Function):每次迭代调用的函数。
[accumulator]
(*):自定义累加器值。
(*):返回累计值。
_.transform([2, 3, 4], function(result, n) { result.push(n *= n); return n % 2 == 0;}, []);// => [4, 9] _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { (result[value] || (result[value] = [])).push(key);}, {}); // => { '1': ['a', 'c'], '2': ['b'] }
移除path
of 处的财产object
。
注意:此方法发生变化 object
。
4.0.0
object
(对象):要修改的对象。
path
(数组|字符串):要设置的属性的路径。
(boolean):返回true
属性是否被删除,否则false
。
var object = { 'a': [{ 'b': { 'c': 7 } }] }; _.unset(object, 'a[0].b.c');// => true console.log(object);// => { 'a': [{ 'b': {} }] }; _.unset(object, ['a', '0', 'b', 'c']);// => true console.log(object);// => { 'a': [{ 'b': {} }] };
这种方法就像_.set
接受updater
产生要设置的值一样。使用_.updateWith
自定义path
创建。该 updater
被调用,一个参数:(值)。
注意:此方法发生变化object
。
4.6.0
object
(对象):要修改的对象。
path
(Array | string):要设置的属性的路径。
updater
(功能):产生更新值的功能。
(对象):返回object
。
var object = { 'a': [{ 'b': { 'c': 3 } }] }; _.update(object, 'a[0].b.c', function(n) { return n * n; });console.log(object.a[0].b.c);// => 9 _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });console.log(object.x[0].y.z);// => 0
这个方法类似于_.update
它接受customizer
被调用来产生对象的方法path
。如果customizer
返回undefined
路径创建是由方法处理的。该customizer
调用有三个参数:(nsValue,key,nsObject)。
注意:此方法发生变化object
。
4.6.0
object
(对象):要修改的对象。
path
(Array | string):要设置的属性的路径。
updater
(功能):产生更新值的功能。
[customizer]
(功能):自定义指定值的功能。
(对象):返回object
。
var object = {}; _.updateWith(object, '[0][1]', _.constant('a'), Object);// => { '0': { '1': 'a' } }
创建一个自己的可枚举字符串键控属性值的数组object
。
注意:非对象值被强制转换为对象。
0.1.0
object
(Object):要查询的对象。
(Array):返回属性值的数组。
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.values(new Foo);// => [1, 2] (iteration order is not guaranteed) _.values('hi');// => ['h', 'i']
创建自己的和继承的可枚举字符串键控属性值的数组 object
。
注意:非对象值被强制转换为对象。
3.0.0
object
(Object):要查询的对象。
(Array):返回属性值的数组。
function Foo() { this.a = 1; this.b = 2;} Foo.prototype.c = 3; _.valuesIn(new Foo);// => [1, 2, 3] (iteration order is not guaranteed)