Skip to content

Object (对象)

_.assign(object, [sources])

引入版本 0.10.0

将来源对象自身可枚举的字符串键属性分配到目标对象上。
来源对象按从左到右的顺序应用,后面的来源对象会覆盖前面来源对象的同名属性。

注意: 此方法会修改 object,并且与 Object.assign 类似。

参数

  • object (Object): 目标对象。
  • [sources] (...Object): 来源对象。

返回

  • (Object): 返回目标对象。

示例

js
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): 返回目标对象。

示例

js
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): 返回目标对象。

示例

js
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): 返回目标对象。

示例

js
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): 返回选取到的值。

示例

js
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): 返回新创建的对象。

示例

js
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): 返回目标对象。

示例

js
_.defaults({ a: 1 }, { b: 2 }, { a: 3 });
// => { 'a': 1, 'b': 2 }

_.defaultsDeep(object, [sources])

引入版本 3.10.0

该方法类似于 _.defaults,但它会递归地分配默认属性。

注意: 此方法会修改 object

参数

  • object (Object): 目标对象。
  • [sources] (...Object): 来源对象。

返回

  • (Object): 返回目标对象。

示例

js
_.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

示例

js
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

示例

js
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 本身。

示例

js
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): 返回对象本身。

示例

js
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): 返回对象本身。

示例

js
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): 返回对象本身。

示例

js
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): 返回函数名称数组。

示例

js
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): 返回函数名称数组。

示例

js
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 时返回的默认值。

返回

  • (*): 返回解析后的值。

示例

js
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

示例

js
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

示例

js
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): 返回新的键值反转对象。

示例

js
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): 返回新的反转后的对象。

示例

js
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] (...*): 调用该方法时传入的参数。

返回

  • (*): 返回被调用方法的结果。

示例

js
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): 返回属性名数组。

示例

js
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): 返回属性名数组。

示例

js
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): 返回键名映射后的新对象。

示例

js
_.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): 返回值映射后的新对象。

示例

js
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): 返回合并后的对象。

示例

js
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): 返回合并后的对象。

示例

js
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): 返回省略指定属性后的新对象。

示例

js
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):返回新的对象

示例

js
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):返回包含所挑选属性的新对象

示例

js
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 的属性

示例

js
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 时返回的默认值

返回值

  • (*):返回解析后的值(若是函数,则返回该函数执行后的结果)

示例

js
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):修改后的对象(同一引用)

示例

js
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) 返回修改后的对象(同一引用)

示例

js
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): 返回键值对数组。

示例

js
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): 返回键值对数组。

示例

js
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] (*): 自定义的累加器初始值。

返回

  • (*): 返回累加后的值。

示例

js
_.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

示例

js
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

示例

js
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

示例

js
var object = {};

_.updateWith(object, "[0][1]", _.constant("a"), Object);
// => { '0': { '1': 'a' } }

_.values(object)

引入版本 0.1.0

创建 object 对象自身可枚举字符串键属性值的数组。

注意: 非对象的值会被强制转换为对象。

参数

  • object (Object): 要查询的对象。

返回

  • (Array): 返回属性值的数组。

示例

js
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): 返回属性值的数组。

示例

js
function Foo() {
  this.a = 1;
  this.b = 2;
}

Foo.prototype.c = 3;

_.valuesIn(new Foo());
// => [1, 2, 3] (不保证迭代顺序)