# @d\_hristov/get-value 中文文档

规范地址：https://npmcn.com/package/%40d_hristov/get-value/

版本：3\.0\.4
npm 元数据更新时间：2022-04-05T02:31:20.742Z
中文译文更新时间：2026-11-11T08:12:29.593Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40d_hristov/get-value
原文对照：https://npmcn.com/package/%40d_hristov/get-value/?lang=original
项目主页：https://github.com/dobromir-hristov/get-value
源码仓库：https://github.com/dobromir-hristov/get-value

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：23.2 kB，7 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：未声明
- Node.js 要求：\>=6\.0
- 运行依赖：1 个
- 首次发布：2018-11-12T20:59:27.119Z
- 最新版本发布：2019-12-30T11:58:00.726Z
- 近 30 天下载量：7888（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：2（近 12 个月 0 个）

## 中文简介

使用像'a.b.c'这样的属性路径从对象获得嵌入值. 甚至当密钥在其中有点时也会起作用(没有其他的点道克库可以做到这一点!).

## 安装

```sh
npm install @d_hristov/get-value
```

也可以使用：`pnpm add @d_hristov/get-value`、`yarn add @d_hristov/get-value`、`bun add @d_hristov/get-value`

## README

# 获取值 [![NPM version](https://img.shields.io/npm/v/get-value.svg?style=flat)](https://www.npmjs.com/package/get-value) [![NPM monthly downloads](https://img.shields.io/npm/dm/get-value.svg?style=flat)](https://npmjs.org/package/get-value) [![NPM total downloads](https://img.shields.io/npm/dt/get-value.svg?style=flat)](https://npmjs.org/package/get-value) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/get-value.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/get-value)

> 使用像'a.b.c'这样的属性路径从对象获得嵌入值. 甚至当密钥在其中有点时也会起作用(没有其他的点道克库可以做到这一点!).

请考虑跟随这个项目的作者, [乔恩·斯林克特](https://github.com/jonschlinkert),并考虑主演该项目以显示你的:心:和支持.

## 目录

**细节**

-   [安装](https://npmcn.com/package/%40d_hristov/get-value/#readme-install)
-   [使用量](https://npmcn.com/package/%40d_hristov/get-value/#readme-usage)
    -   [支持带有点的密钥](https://npmcn.com/package/%40d_hristov/get-value/#readme-supports-keys-with-dots)
    -   [支持数组](https://npmcn.com/package/%40d_hristov/get-value/#readme-supports-arrays)
    -   [支助职能](https://npmcn.com/package/%40d_hristov/get-value/#readme-supports-functions)
    -   [支持以数组形式传递对象路径](https://npmcn.com/package/%40d_hristov/get-value/#readme-supports-passing-object-path-as-an-array)
-   [选项](https://npmcn.com/package/%40d_hristov/get-value/#readme-options)
    -   [选项。默认](https://npmcn.com/package/%40d_hristov/get-value/#readme-optionsdefault)
    -   [选项。 is Valid](https://npmcn.com/package/%40d_hristov/get-value/#readme-optionsisvalid)
    -   [选项](https://npmcn.com/package/%40d_hristov/get-value/#readme-optionssplit)
    -   [选项。分隔符](https://npmcn.com/package/%40d_hristov/get-value/#readme-optionsseparator)
    -   [选项。加入](https://npmcn.com/package/%40d_hristov/get-value/#readme-optionsjoin)
    -   [选项](https://npmcn.com/package/%40d_hristov/get-value/#readme-optionsjoinchar)
-   [基准](https://npmcn.com/package/%40d_hristov/get-value/#readme-benchmarks)
    -   [运行基准](https://npmcn.com/package/%40d_hristov/get-value/#readme-running-the-benchmarks)
-   [发布历史](https://npmcn.com/package/%40d_hristov/get-value/#readme-release-history)
    -   [页:1](https://npmcn.com/package/%40d_hristov/get-value/#readme-v300)
-   [关于](https://npmcn.com/package/%40d_hristov/get-value/#readme-about)

## 安装

安装方式 [无](https://www.npmjs.com/)数字 :

```sh
$ npm install --save get-value
```

## 使用量

见 [单位测试](https://npmcn.com/package/%40d_hristov/get-value/test/test.js) 对于更多的例子.

```js
const get = require('foo');
const obj = { a: { b: { c: { d: 'foo' } } } };

console.log(get(obj));            //=> { a: { b: { c: { d: 'foo' } } } };
console.log(get(obj, 'a'));       //=> { b: { c: { d: 'foo' } } }
console.log(get(obj, 'a.b'));     //=> { c: { d: 'foo' } }
console.log(get(obj, 'a.b.c'));   //=> { d: 'foo' }
console.log(get(obj, 'a.b.c.d')); //=> 'foo'
```

### 支持带有点的密钥

与其他点道克库不同,当密钥在其中有点时,获得值的作品:

```js
console.log(get({ 'a.b': { c: 'd' } }, 'a.b.c'));
//=> 'd'

console.log(get({ 'a.b': { c: { 'd.e': 'f' } } }, 'a.b.c.d.e'));
//=> 'f'
```

### 支持数组

```js
console.log(get({ a: { b: { c: { d: 'foo' } } }, e: [{ f: 'g' }, { f: 'h' }] }, 'e.1.f'));   
//=> 'h'

console.log(get({ a: { b: [{ c: 'd' }] } }, 'a.b.0.c')); 
//=> 'f'

console.log(get({ a: { b: [{ c: 'd' }, { e: 'f' }] } }, 'a.b.1.e'));
//=> 'f'
```

### 支助职能

```js
function foo() {}
foo.bar = { baz: 'qux' };

console.log(get(foo));            
//=> { [Function: foo] bar: { baz: 'qux' } }

console.log(get(foo, 'bar'));     
//=> { baz: 'qux' }

console.log(get(foo, 'bar.baz')); 
//=> qux
```

### 支持以数组形式传递对象路径

通过传递一系列字符串以用作对象路径区段(这在需要动态地建立路径区段时也是有用的)来改善性能 :

```js
console.log(get({ a: { b: 'c' } }, ['a', 'b']));
//=> 'c'
```

## 选项

### 选项。默认

**类型**数字 : `any`

**默认**数字 : `undefined`

当获取值无法从给定对象解析出值时返回的默认值 .

```js
const obj = { foo: { a: { b: { c: { d: 'e' } } } } };
console.log(get(obj, 'foo.a.b.c.d', { default: true }));  //=> 'e'
console.log(get(obj, 'foo.bar.baz', { default: true }));  //=> true
console.log(get(obj, 'foo.bar.baz', { default: false })); //=> false
console.log(get(obj, 'foo.bar.baz', { default: null }));  //=> null

// you can also pass the default value as the last argument
// (this is necessary if the default value is an object)
console.log(get(obj, 'foo.a.b.c.d', true));  //=> 'e'
console.log(get(obj, 'foo.bar.baz', true));  //=> true
console.log(get(obj, 'foo.bar.baz', false)); //=> false
console.log(get(obj, 'foo.bar.baz', null));  //=> null
```

### 选项。 is Valid

**类型**数字 : `function`

**默认**数字 : `true`

如果定义了,此函数会被调用每个已解析的值. 有用,如果你想做的话 `.hasOwnProperty` 或者说 `Object.prototype.propertyIsEnumerable`。 。 。 .

```js
const isEnumerable = Object.prototype.propertyIsEnumerable;
const options = {
  isValid: (key, obj) => isEnumerable.call(obj, key)
};

const obj = {};
Object.defineProperty(obj, 'foo', { value: 'bar', enumerable: false });

console.log(get(obj, 'foo', options));           //=> undefined
console.log(get({}, 'hasOwnProperty', options)); //=> undefined
console.log(get({}, 'constructor', options));    //=> undefined

// without "isValid" check
console.log(get(obj, 'foo', options));           //=> bar
console.log(get({}, 'hasOwnProperty', options)); //=> [Function: hasOwnProperty]
console.log(get({}, 'constructor', options));    //=> [Function: Object]
```

### 选项

**类型**数字 : `function`

**默认**数字 : `String.split()`

自定义用于将字符串分割为对象路径段的函数.

```js
const obj = { 'a.b': { c: { d: 'e' } } };

// example of using a string to split the object path
const options = { split: path => path.split('/') };
console.log(get(obj, 'a.b/c/d', options)); //=> 'e'

// example of using a regex to split the object path
// (removing escaped dots is unnecessary, this is just an example)
const options = { split: path => path.split(/\\?\./) };
console.log(get(obj, 'a\\.b.c.d', options)); //=> 'e'
```

### 选项。分隔符

**类型**数字 : `string|regex`

**默认**数字 : `.`

用于分割字符串的分隔符( 当 `options.split` )),该词被使用.

```js
const obj = { 'a.b': { c: { d: 'e' } } };

console.log(get(obj, 'a.b/c/d', { separator: '/' }));       
//=> 'e'

console.log(get(obj, 'a\\.b.c.d', { separator: /\\?\./ })); 
//=> 'e'
```

### 选项。加入

**类型**数字 : `function`

**默认**数字 : `Array.join()`

自定义在路径段上延展时如何创建对象路径 .

```js
const obj = { 'a/b': { c: { d: 'e' } } };
const options = {
  // when segs === ['a', 'b'] use a "/" to join, otherwise use a "."
  join: segs => segs.join(segs[0] === 'a' ? '/' : '.')
};

console.log(get(obj, 'a.b.c.d', options));
//=> 'e'
```

### 选项

**类型**数字 : `string`

**默认**数字 : `.`

重新加入字符串以检查其中有点的密钥时所使用的字符( 很可能不需要此字符) `options.join` )),该词被使用. 这可以和分隔符不同,因为分隔符可以是字符串或regex.

```js
const target = { 'a-b': { c: { d: 'e' } } };
const options = { joinChar: '-' };
console.log(get(target, 'a.b.c.d', options)); 
//=> 'e'
```

## 基准

_(基准在MacBook Pro 2.5 GHz Intel Core i7,16 GB 1600 MHz DDR3上运行)_。 。 。 .

get-value更可靠,并且比"点-道具"具有更多的特性,而不牺牲性能.

```
# deep (175 bytes)
  dot-prop x 883,166 ops/sec ±0.93% (86 runs sampled)
  get-value x 1,448,928 ops/sec ±1.53% (87 runs sampled)
  getobject x 213,797 ops/sec ±0.85% (90 runs sampled)
  object-path x 184,347 ops/sec ±2.48% (85 runs sampled)

  fastest is get-value (by 339% avg)

# root (210 bytes)
  dot-prop x 3,905,828 ops/sec ±1.36% (87 runs sampled)
  get-value x 16,391,934 ops/sec ±1.43% (83 runs sampled)
  getobject x 1,200,021 ops/sec ±1.81% (88 runs sampled)
  object-path x 2,788,494 ops/sec ±1.81% (86 runs sampled)

  fastest is get-value (by 623% avg)

# shallow (84 bytes)
  dot-prop x 2,553,558 ops/sec ±0.89% (89 runs sampled)
  get-value x 3,070,159 ops/sec ±0.88% (90 runs sampled)
  getobject x 726,670 ops/sec ±0.81% (86 runs sampled)
  object-path x 922,351 ops/sec ±2.05% (86 runs sampled)

  fastest is get-value (by 219% avg)

```

### 运行基准

将此库切入本地目录 :

```sh
$ git clone https://github.com/jonschlinkert/get-value.git
```

然后安装依赖性并运行基准 :

```sh
$ npm install && node benchmark
```

## 发布历史

### 页:1

-   改进对逃跑的支持。 不再需要用回鞭来逃出钥匙了.
-   添加数 `options.default` 用于定义未解决值时返回的默认值.
-   添加数 `options.isValid` 允许用户在每个迭代后检查对象.
-   添加数 `options.separator` 用于自定义字符拆分.
-   添加数 `options.split` 用于自定义对象路径的分割.
-   添加数 `options.join` 用于自定义在路径段上延展时对象路径的结合方式.
-   添加数 `options.joinChar` 用于自定义连接字符.

## 关于

**捐款**

拉出请求和星星总是受欢迎的. 对于错误和特性请求, [请创建一个问题](https://npmcn.com/package/issues/new)。 。 。 .

**运行测试**

运行和审查单元测试是熟悉图书馆及其API的好办法。 您可以使用以下命令安装依赖性并运行测试:

```sh
$ npm install && npm test
```
**大楼文件**

_(此工程的 readme.md 由 [动词](https://github.com/verbose/verb-generate-readme)请不要直接编辑读取器。 读取器的任何改动必须在 [动词 md](https://npmcn.com/package/%40d_hristov/get-value/.verb.md) 读取我的模板。 )_

要生成读取, 请运行以下命令 :

```sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
```

### 相关项目

您可能也对这些项目感兴趣:

-   [已经深处](https://www.npmjs.com/package/has-any-deep): 如果 `key` 深存在于给定对象上 。\\\\\\ x [主页](https://github.com/jonschlinkert/has-any-deep "Return true if `key` exists deeply on the given object. ")
-   [拥有 - 任何](https://www.npmjs.com/package/has-any): 如果对象有任何指定的密钥, 返回真实值。 | [主页](https://github.com/jonschlinkert/has-any "Returns true if an object has any of the specified keys.")
-   [有值](https://www.npmjs.com/package/has-value): 如果一个值存在, 返回真; 如果是空的, 返回假。 使用深层嵌入值 [更多](https://github.com/jonschlinkert/has-value) | [主页](https://github.com/jonschlinkert/has-value "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.")
-   [设置值](https://www.npmjs.com/package/set-value): 创建嵌入值和任何使用点符号的中间体(`'a.b.c'`)路径 [主页](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
-   [未设值](https://www.npmjs.com/package/unset-value): 使用点标记从对象中删除嵌入属性。 | [主页](https://github.com/jonschlinkert/unset-value "Delete nested properties from an object using dot notation.")

### 贡献者

| **提交** | **贡献者** | | -- -- -- -- -- -- -- 81岁) [扬施林克特](https://github.com/jonschlinkert) | |2| [安华特](https://github.com/ianwalter) | | 1 | [鸽子](https://github.com/doowb) |

### 作者

**乔恩·斯林克特**

-   [链接到配置文件](https://linkedin.com/in/jonschlinkert)
-   [GitHub 配置文件](https://github.com/jonschlinkert)
-   [推特简介](https://twitter.com/jonschlinkert)

### 许可证

版权: 2018, [乔恩·斯林克特](https://github.com/jonschlinkert)。 。 。 . 释放 [MIT 许可证](https://npmcn.com/package/%40d_hristov/get-value/LICENSE)。 。 。 .

* * *

_此文件由 [动词基因读取器](https://github.com/verbose/verb-generate-readme), v 6.0,于2018年3月07日查阅._

## 常见问题

### @d\_hristov/get-value 是什么？

使用像'a\.b\.c'这样的属性路径从对象获得嵌入值\. 甚至当密钥在其中有点时也会起作用\(没有其他的点道克库可以做到这一点\!\)\.

### 如何安装 @d\_hristov/get-value？

在项目目录运行 npm install @d\_hristov/get-value，或使用 pnpm add / yarn add / bun add。

### @d\_hristov/get-value 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/d\_hristov\_\_get-value 是否存在。

### @d\_hristov/get-value 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @d\_hristov/get-value 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=6\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @d\_hristov/get-value 可以商用吗？

@d\_hristov/get-value 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @d\_hristov/get-value 的下载量有多少？

根据 npm 官方下载统计，@d\_hristov/get-value 在 2026/10/11 – 2026/11/09 这 30 天内被下载 7,888 次，日均约 263 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @d\_hristov/get-value 还在维护吗？

最新版本 3\.0\.4 发布于 2019/12/30（6 年前）；至今共发布 2 个版本，其中过去 12 个月发布了 0 个；首次发布于 2018/11/13。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

