Object (对象)
_.assign(object, [sources])
引入版本 0.10.0
将来源对象自身可枚举的字符串键属性分配到目标对象上。
来源对象按从左到右的顺序应用,后面的来源对象会覆盖前面来源对象的同名属性。
注意: 此方法会修改 object,并且与 Object.assign 类似。
参数
- object
(Object): 目标对象。 - [sources]
(...Object): 来源对象。
返回
- (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 }_.assignIn(object, [sources])
引入版本 4.0.0
该方法类似于 _.assign,但它会遍历来源对象的自身属性和继承属性。
注意: 此方法会修改 object。
别名: _.extend
参数
- object
(Object): 目标对象。 - [sources]
(...Object): 来源对象。
返回
- (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 }_.assignInWith(object, sources, [customizer])
引入版本 4.0.0
该方法类似于 _.assignIn,但它接受一个 customizer,该函数用于生成被分配的值。
如果 customizer 返回 undefined,则由默认赋值逻辑处理。customizer 会被调用并传入五个参数:(objValue, srcValue, key, object, source)。
注意: 此方法会修改 object。
别名: _.extendWith
参数
- object
(Object): 目标对象。 - sources
(...Object): 来源对象。 - [customizer]
(Function): 用于自定义赋值的函数。
返回
- (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 }_.assignWith(object, sources, [customizer])
引入版本 4.0.0
该方法类似于 _.assign,但它接受一个 customizer,用于生成要被分配的值。
如果 customizer 返回 undefined,则使用默认赋值行为。customizer 会被调用并传入五个参数:(objValue, srcValue, key, object, source)。
注意: 此方法会修改 object。
参数
- object
(Object): 目标对象。 - sources
(...Object): 来源对象。 - [customizer]
(Function): 用于自定义赋值的函数。
返回
- (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 }_.at(object, [paths])
引入版本 1.0.0
根据给定的路径数组创建一个由对象属性值组成的数组。
参数
- object
(Object): 要遍历的对象。 - [paths]
(...(string|string[])): 要选取的属性路径。
返回
- (Array): 返回选取到的值。
示例
var object = { a: [{ b: { c: 3 } }, 4] };
_.at(object, ["a[0].b.c", "a[1]"]);
// => [3, 4]_.create(prototype, [properties])
引入版本 2.3.0
创建一个继承自给定 prototype 的对象。
如果提供了 properties 对象,则它的自身可枚举字符串键属性会被分配到新对象上。
参数
- prototype
(Object): 要继承的对象。 - [properties]
(Object): 要分配给新对象的属性。
返回
- (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_.defaults(object, [sources])
引入版本 0.1.0
将来源对象自身和继承的可枚举字符串键属性分配给目标对象,但仅限目标对象中值为 undefined 的属性。
来源对象按从左到右应用。一旦某个属性被设置,后续来源对象中的同名属性会被忽略。
注意: 此方法会修改 object。
参数
- object
(Object): 目标对象。 - [sources]
(...Object): 来源对象。
返回
- (Object): 返回目标对象。
示例
_.defaults({ a: 1 }, { b: 2 }, { a: 3 });
// => { 'a': 1, 'b': 2 }_.defaultsDeep(object, [sources])
引入版本 3.10.0
该方法类似于 _.defaults,但它会递归地分配默认属性。
注意: 此方法会修改 object。
参数
- object
(Object): 目标对象。 - [sources]
(...Object): 来源对象。
返回
- (Object): 返回目标对象。
示例
_.defaultsDeep({ a: { b: 2 } }, { a: { b: 1, c: 3 } });
// => { 'a': { 'b': 2, 'c': 3 } }_.findKey(object, [predicate=_.identity])
引入版本 1.1.0
该方法类似于 _.find,但它返回的是 使 predicate 返回真值的第一个元素的键,而不是元素本身。
参数
- object
(Object): 要检查的对象。 - [predicate=_.identity]
(Function): 每次迭代调用的函数。
返回
- (*): 返回匹配元素的键;否则返回
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' (迭代顺序不保证一致)
// `_.matches` 迭代器简写
_.findKey(users, { age: 1, active: true });
// => 'pebbles'
// `_.matchesProperty` 迭代器简写
_.findKey(users, ["active", false]);
// => 'fred'
// `_.property` 迭代器简写
_.findKey(users, "active");
// => 'barney'_.findLastKey(object, [predicate=_.identity])
引入版本 2.0.0
该方法类似于 _.findKey,但它按相反顺序遍历集合中的元素。
参数
- object
(Object): 要检查的对象。 - [predicate=_.identity]
(Function): 每次迭代调用的函数。
返回
- (*): 返回最后一个匹配元素的键;否则返回
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;
});
// => 'pebbles' (假设 _.findKey 返回 'barney')
// `_.matches` 迭代器简写
_.findLastKey(users, { age: 36, active: true });
// => 'barney'
// `_.matchesProperty` 迭代器简写
_.findLastKey(users, ["active", false]);
// => 'fred'
// `_.property` 迭代器简写
_.findLastKey(users, "active");
// => 'pebbles'_.forIn(object, [iteratee=_.identity])
引入版本 0.3.0
遍历对象自身和继承的可枚举字符串键属性,并为每个属性调用 iteratee。iteratee 会被调用并传入三个参数:(value, key, object)。
若 iteratee 显式返回 false,则会提前退出迭代。
参数
- object
(Object): 要遍历的对象。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。
返回
- (Object): 返回
object本身。
示例
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.forIn(new Foo(), function (value, key) {
console.log(key);
});
// => 输出 'a'、'b',然后 'c'(迭代顺序不保证)_.forInRight(object, [iteratee=_.identity])
引入版本 2.0.0
该方法类似于 _.forIn,但它按照相反的顺序遍历对象的可枚举属性(包含继承属性)。
参数
- object
(Object): 要遍历的对象。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。
返回
- (Object): 返回对象本身。
示例
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.forInRight(new Foo(), function (value, key) {
console.log(key);
});
// => 输出 'c'、'b'、'a'
// 假设 _.forIn 输出 'a'、'b'、'c'_.forOwn(object, [iteratee=_.identity])
引入版本 0.3.0
遍历对象自身的可枚举字符串键属性,并为每个属性调用 iteratee。iteratee 会接收三个参数:(value, key, object)。
若 iteratee 显式返回 false,则终止迭代。
参数
- 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);
});
// => 输出 'a'、然后 'b'(迭代顺序不保证)_.forOwnRight(object, [iteratee=_.identity])
引入版本 2.0.0
该方法类似于 _.forOwn,但它以相反的顺序遍历对象自身的可枚举属性。
参数
- 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);
});
// => 输出 'b'、然后 'a'
// 假设 _.forOwn 输出 'a'、'b'_.functions(object)
引入版本 0.1.0
从对象自身的可枚举属性中创建一个由函数属性名组成的数组。
参数
- object
(Object): 要检查的对象。
返回
- (Array): 返回函数名称数组。
示例
function Foo() {
this.a = _.constant("a");
this.b = _.constant("b");
}
Foo.prototype.c = _.constant("c");
_.functions(new Foo());
// => ['a', 'b']_.functionsIn(object)
引入版本 4.0.0
从对象自身 及其继承的 可枚举属性中,创建一个由函数属性名组成的数组。
参数
- object
(Object): 要检查的对象。
返回
- (Array): 返回函数名称数组。
示例
function Foo() {
this.a = _.constant("a");
this.b = _.constant("b");
}
Foo.prototype.c = _.constant("c");
_.functionsIn(new Foo());
// => ['a', 'b', 'c']_.get(object, path, [defaultValue])
引入版本 3.7.0
获取 object 指定路径上的值。如果解析结果为 undefined,则返回 defaultValue。
参数
- 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'_.has(object, path)
引入版本 0.1.0
检查 path 是否是 object 的直接属性。
参数
- object
(Object): 要查询的对象。 - path
(Array|string): 要检查的属性路径。
返回
- (boolean): 如果路径存在返回
true,否则返回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_.hasIn(object, path)
引入版本 4.0.0
检查 path 是否是 object 的直接属性或继承属性。
参数
- object
(Object): 要查询的对象。 - path
(Array|string): 要检查的属性路径。
返回
- (boolean): 如果路径存在返回
true,否则返回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_.invert(object)
引入版本 0.7.0
创建一个键和值反转的新对象。如果 object 中存在重复值,则后出现的值会覆盖之前的键映射。
参数
- object
(Object): 要反转的对象。
返回
- (Object): 返回新的键值反转对象。
示例
var object = { a: 1, b: 2, c: 1 };
_.invert(object);
// => { '1': 'c', '2': 'b' }_.invertBy(object, [iteratee=_.identity])
引入版本 4.1.0
该方法类似于 _.invert,但会先对 object 的每个元素运行 iteratee,并依据结果生成反转后的对象。每个反转后的 key 的值为由原对象中生成此 key 的属性名组成的数组。iteratee 调用时会传入一个参数:value。
参数
- object
(Object): 要反转的对象。 - iteratee
(Function): 用于为每个元素生成反转 key 的函数。
返回
- (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'] }_.invoke(object, path, [args])
引入版本 4.0.0
在 object 的指定 path 调用对应的方法。
参数
- object
(Object): 要查询的对象。 - path
(Array|string): 要调用的方法所在的路径。 - [args] (...*): 调用该方法时传入的参数。
返回
- (*): 返回被调用方法的结果。
示例
var object = { a: [{ b: { c: [1, 2, 3, 4] } }] };
_.invoke(object, "a[0].b.c.slice", 1, 3);
// => [2, 3]_.keys(object)
引入版本 0.1.0
创建一个由 object 自身可枚举属性名称组成的数组。
注意
非对象类型的值会被强制转换为对象。更多细节可参考 ES 规范。
参数
- object
(Object): 要查询的对象。
返回
- (Array): 返回属性名数组。
示例
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.keys(new Foo());
// => ['a', 'b'] (迭代顺序不保证)
_.keys("hi");
// => ['0', '1']_.keysIn(object)
引入版本 3.0.0
创建一个包含 object 自身以及继承的可枚举属性名称的数组。
注意
非对象类型的值会被强制转换为对象。
参数
- object
(Object): 要查询的对象。
返回
- (Array): 返回属性名数组。
示例
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.keysIn(new Foo());
// => ['a', 'b', 'c'] (迭代顺序不保证)_.mapKeys(object, [iteratee=_.identity])
引入版本 3.8.0
与 _.mapValues 相反,该方法会基于 iteratee 生成新的键名,并保留原对象的值。iteratee 会以三个参数被调用:(value, key, object)。
参数
- object
(Object): 要迭代的对象。 - [iteratee=_.identity]
(Function): 每次迭代时调用的函数。
返回
- (Object): 返回键名映射后的新对象。
示例
_.mapKeys({ a: 1, b: 2 }, function (value, key) {
return key + value;
});
// => { 'a1': 1, 'b2': 2 }_.mapValues(object, [iteratee=_.identity])
引入版本 2.4.0
创建一个新对象,其键与 object 相同,但值由对每个自身可枚举属性调用 iteratee 的结果生成。iteratee 会以三个参数被调用:(value, key, object)。
参数
- 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 } (迭代顺序不保证)
// `_.property` 迭代器简写
_.mapValues(users, "age");
// => { 'fred': 40, 'pebbles': 1 } (迭代顺序不保证)_.merge(object, [sources])
引入版本 0.5.0
类似于 _.assign,但会 递归地 合并来源对象的自身与继承的可枚举字符串键属性到目标对象中。
如果来源对象中的属性值为 undefined 且目标中已存在对应键,则会跳过。
数组与普通对象会被递归合并。其他类型的值将被赋值覆盖。
来源对象从左到右应用,后面的来源对象会覆盖前面的结果。
注意:该方法会修改
object本身。
参数
- object
(Object): 目标对象。 - [sources] (...Object): 来源对象。
返回
- (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 } ] }_.mergeWith(object, sources, customizer)
引入版本 4.0.0
该方法类似于 _.merge,但多接受一个 customizer,用于自定义目标属性与来源属性的合并结果。
如果 customizer 返回 undefined,则由默认合并逻辑处理。
customizer 会被传入 6 个参数:(objValue, srcValue, key, object, source, stack)
注意:该方法会修改
object本身。
参数
- object
(Object): 目标对象。 - sources (...Object): 来源对象。
- customizer
(Function): 自定义合并逻辑的函数。
返回
- (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] }_.omit(object, [paths])
引入版本 0.1.0
与 _.pick 相反,_.omit 会创建一个对象,其中 包含源对象自身与继承的可枚举属性中未被忽略的部分。
(即:从对象中排除指定路径的属性)
注意:该方法比
_.pick慢得多。
参数
- object
(Object): 源对象。 - [paths] (...(string|string[])): 要省略的属性路径。
返回
- (Object): 返回省略指定属性后的新对象。
示例
var object = { a: 1, b: "2", c: 3 };
_.omit(object, ["a", "c"]);
// => { 'b': '2' }_.omitBy(object, [predicate=_.identity])
引入版本 4.0.0
与 _.pickBy 相反,_.omitBy 会创建一个新对象,
包含源对象自身与继承的可枚举属性中 使 predicate 返回假值的属性。
predicate 接收 (value, key) 两个参数。
参数
- object
(Object):源对象 - [predicate=_.identity]
(Function):判断应当省略哪些属性的函数
返回值
- (Object):返回新的对象
示例
var object = { a: 1, b: "2", c: 3 };
_.omitBy(object, _.isNumber);
// => { 'b': '2' }_.pick(object, [paths])
引入版本 0.1.0
创建一个由 指定属性 paths 组成的新对象。
参数
- object
(Object):源对象 - [paths] (...(string|string[])):要挑选的属性路径,可以是字符串或字符串数组
返回值
- (Object):返回包含所挑选属性的新对象
示例
var object = { a: 1, b: "2", c: 3 };
_.pick(object, ["a", "c"]);
// => { 'a': 1, 'c': 3 }_.pickBy(object, [predicate = _.identity])
引入版本 4.0.0
创建一个由 满足 predicate 条件的属性 组成的新对象。predicate 会以 (value, key) 作为参数被调用,并返回 truthy 时,该属性会被保留。
参数
- object
(Object):源对象 - [predicate = _.identity]
(Function):对每个属性调用的函数,返回 truthy 则保留该属性
返回值
- (Object):返回新的对象,仅包含 predicate 返回 truthy 的属性
示例
var object = { a: 1, b: "2", c: 3 };
_.pickBy(object, _.isNumber);
// => { 'a': 1, 'c': 3 }_.result(object, path, [defaultValue])
引入版本 0.1.0
此方法类似于 _.get,但如果取到的值是 函数,则会以该函数所在父对象作为 this 进行调用,并返回调用结果。
参数
- 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'_.set(object, path, value)
引入版本:3.7.0
为 object 的指定路径 path 设置值。若路径不存在,会自动创建:
- 需要数组索引 → 创建数组
- 其他情况 → 创建对象
如需自定义创建方式,可使用_.setWith。
注意:此方法会修改原对象(mutates object)
参数
- object
(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_.setWith(object, path, value, [customizer])
引入版本:4.0.0
此方法类似 _.set,但允许提供 customizer 来自定义创建路径中的对象。 当 customizer 返回 undefined 时,将回退为默认的创建逻辑(对象或数组)。
customizer 的三个参数为:
- nsValue(当前节点值)
- key(当前键)
- nsObject(当前对象)
注意:此方法会修改原对象(mutates object)
参数
- object
(Object):要修改的对象 - path
(Array|string):路径 - value
(*):要设置的值 - customizer
(Function):自定义赋值或创建逻辑
返回值
- (Object) 返回修改后的对象(同一引用)
示例
var object = {};
_.setWith(object, "[0][1]", "a", Object);
// => { '0': { '1': 'a' } }
console.log(object);_.toPairs(object)
引入版本 4.0.0
创建一个 object 对象自身可枚举属性的键值对数组。这个数组可以被 _.fromPairs 使用。如果 object 是 Map 或 Set,则返回其条目(entries)。
别名: _.entries
参数
- object
(Object): 要查询的对象。
返回
- (Array): 返回键值对数组。
示例
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.toPairs(new Foo());
// => [['a', 1], ['b', 2]] (不保证迭代顺序)_.toPairsIn(object)
引入版本 4.0.0
创建一个 object 对象自身和 继承的 可枚举属性的键值对数组。这个数组可以被 _.fromPairs 使用。如果 object 是 Map 或 Set,则返回其条目(entries)。
别名: _.entriesIn
参数
- object
(Object): 要查询的对象。
返回
- (Array): 返回键值对数组。
示例
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.toPairsIn(new Foo());
// => [['a', 1], ['b', 2], ['c', 3]] (不保证迭代顺序)_.transform(object, [iteratee=_.identity], [accumulator])
引入版本 1.3.0
_.reduce 的一种替代方案;此方法将 object 转换为一个新的 accumulator 对象,该对象是 iteratee(迭代函数)遍历 object 中每个元素的结果。每次调用都可能会改变 accumulator 对象。
如果未提供 accumulator,则会根据 object 的类型自动初始化一个新的累加器(如果 object 是数组,则初始化为 [];如果是对象,则初始化为 {} 并继承其 [[Prototype]])。
iteratee 调用时会传入四个参数:(accumulator, value, index|key, object)。迭代函数可以通过显式返回 false 来提前退出迭代。
参数
- object
(Object): 要遍历的对象。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。 - [accumulator]
(*): 自定义的累加器初始值。
返回
- (*): 返回累加后的值。
示例
_.transform(
[2, 3, 4],
function (result, n) {
result.push((n *= n));
return n % 2 == 0; // 如果 n 是偶数(这里是平方后的 4 和 16),返回 true 继续;如果是奇数(9),返回 false 停止。
},
[]
);
// => [4, 9]
_.transform(
{ a: 1, b: 2, c: 1 },
function (result, value, key) {
(result[value] || (result[value] = [])).push(key);
},
{}
);
// => { '1': ['a', 'c'], '2': ['b'] }_.unset(object, path)
引入版本 4.0.0
移除 object 对象中指定 path(路径)上的属性。
注意: 这个方法会 改变(mutate)原对象。
参数
- object
(Object): 要修改的对象。 - path
(Array|string): 要移除的属性路径。
返回
- (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': {} }] }_.update(object, path, updater)
引入版本 4.6.0
该方法类似 _.set,区别在于它接受一个 updater(更新函数)来生成要设置的值。使用 _.updateWith 可以定制路径的创建。
updater 调用时会传入一个参数:(value)。
注意: 这个方法会 改变(mutate)原对象。
参数
- object
(Object): 要修改的对象。 - path
(Array|string): 要设置属性的路径。 - updater
(Function): 用来生成更新值的函数。
返回
- (Object): 返回
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_.updateWith(object, path, updater, [customizer])
引入版本 4.6.0
该方法类似 _.update,区别在于它接受一个 customizer(定制函数),调用该函数来生成路径上的对象。如果 customizer 返回 undefined,路径创建将由本方法内部处理。
customizer 调用时会传入三个参数:(nsValue, key, nsObject)。
注意: 这个方法会 改变(mutate)原对象。
参数
- object
(Object): 要修改的对象。 - path
(Array|string): 要设置属性的路径。 - updater
(Function): 用来生成更新值的函数。 - [customizer]
(Function): 用来定制分配值的函数(通常用于定制路径创建)。
返回
- (Object): 返回
object。
示例
var object = {};
_.updateWith(object, "[0][1]", _.constant("a"), Object);
// => { '0': { '1': 'a' } }_.values(object)
引入版本 0.1.0
创建 object 对象自身可枚举字符串键属性值的数组。
注意: 非对象的值会被强制转换为对象。
参数
- object
(Object): 要查询的对象。
返回
- (Array): 返回属性值的数组。
示例
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.values(new Foo());
// => [1, 2] (不保证迭代顺序)
_.values("hi");
// => ['h', 'i']_.valuesIn(object)
引入版本 3.0.0
创建 object 对象自身和 继承的 可枚举字符串键属性值的数组。
注意: 非对象的值会被强制转换为对象。
参数
- object
(Object): 要查询的对象。
返回
- (Array): 返回属性值的数组。
示例
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.valuesIn(new Foo());
// => [1, 2, 3] (不保证迭代顺序)