获取值

使用像'a.b.c'这样的属性路径从对象获得嵌入值. 甚至当密钥在其中有点时也会起作用(没有其他的点道克库可以做到这一点!).
请考虑跟随这个项目的作者, 乔恩·斯林克特,并考虑主演该项目以显示你的:心:和支持.
目录
细节
安装
安装方式 无数字 :
$ npm install --save get-value
使用量
见 单位测试 对于更多的例子.
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'
支持带有点的密钥
与其他点道克库不同,当密钥在其中有点时,获得值的作品:
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'
支持数组
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'
支助职能
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
支持以数组形式传递对象路径
通过传递一系列字符串以用作对象路径区段(这在需要动态地建立路径区段时也是有用的)来改善性能 :
console.log(get({ a: { b: 'c' } }, ['a', 'b']));
//=> 'c'
选项
选项。默认
类型数字 : any
默认数字 : undefined
当获取值无法从给定对象解析出值时返回的默认值 .
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。 。 。 .
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()
自定义用于将字符串分割为对象路径段的函数.
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 )),该词被使用.
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()
自定义在路径段上延展时如何创建对象路径 .
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.
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)
运行基准
将此库切入本地目录 :
$ git clone https://github.com/jonschlinkert/get-value.git
然后安装依赖性并运行基准 :
$ npm install && node benchmark
发布历史
页:1
- 改进对逃跑的支持。 不再需要用回鞭来逃出钥匙了.
- 添加数
options.default用于定义未解决值时返回的默认值. - 添加数
options.isValid允许用户在每个迭代后检查对象. - 添加数
options.separator用于自定义字符拆分. - 添加数
options.split用于自定义对象路径的分割. - 添加数
options.join用于自定义在路径段上延展时对象路径的结合方式. - 添加数
options.joinChar用于自定义连接字符.
关于
捐款
拉出请求和星星总是受欢迎的. 对于错误和特性请求, 请创建一个问题。 。 。 .
运行测试
运行和审查单元测试是熟悉图书馆及其API的好办法。 您可以使用以下命令安装依赖性并运行测试:
$ npm install && npm test
大楼文件
(此工程的 readme.md 由 动词请不要直接编辑读取器。 读取器的任何改动必须在 动词 md 读取我的模板。 )
要生成读取, 请运行以下命令 :
$ npm install -g verbose/verb#dev verb-generate-readme && verb
相关项目
您可能也对这些项目感兴趣:
- 已经深处: 如果
key深存在于给定对象上 。\\\ x 主页 - 拥有 - 任何: 如果对象有任何指定的密钥, 返回真实值。 | 主页
- 有值: 如果一个值存在, 返回真; 如果是空的, 返回假。 使用深层嵌入值 更多 | 主页
- 设置值: 创建嵌入值和任何使用点符号的中间体(
'a.b.c')路径 主页 - 未设值: 使用点标记从对象中删除嵌入属性。 | 主页
贡献者
| 提交 | 贡献者 | | -- -- -- -- -- -- -- 81岁) 扬施林克特 | |2| 安华特 | | 1 | 鸽子 |
作者
乔恩·斯林克特
许可证
版权: 2018, 乔恩·斯林克特。 。 。 . 释放 MIT 许可证。 。 。 .
此文件由 动词基因读取器, v 6.0,于2018年3月07日查阅.