繁体   English   中英

使用数组中的键访问对象

[英]Access an object with the keys in an array

我有一个对象,我想访问它:

obj['example']['example-2']['example-3'];

问题是我有一个数组来存储这些键:

arr = ['example', 'example-2', 'example-3'];

但是这个数组可以是可变长度的,所以也许它只有 3 个键,也许有 6 个。如何在不对每种情况进行硬编码的情况下实现这一点,例如:

if(arr.length == 1){
  //obj[arr[0]];
}else if (arr.length == 2){
  //obj[arr[0]][arr[1]];
} 

等等..

您可以使用路径并减少对象。

 function getValue(o, path) { return path.reduce(function (o, k) { return (o || {})[k]; }, o); } var obj = { example: { 'example-2': { 'example-3': 42 } } }, arr = ['example', 'example-2', 'example-3']; console.log(getValue(obj, arr));

对于其他人,如果您不想使用 reduce,则可以使用简单的 for 循环。

 function getNestedValue(obj, keys) { var ret = obj[keys[0]]; for (var i = 1; i < keys.length; i++) { ret = ret[keys[i]]; } return ret; } var ob = { HelloWorld: { James: { Ted: 55 } } }; var depth = ["HelloWorld", "James", "Ted"];

你可以使用这个object-dig 包

这允许您在 JavaScript 中使用像 Ruby 的 hash#dig 这样的方法。

var dig = require('object-dig');

var object = { a: { b: { c: 'c' } } };

dig(object, 'a', 'b');
// => { c: 'c' } 

dig(object, 'a', 'b', 'c');
// => 'c' 

dig(object, 'a', 'unknownProp', 'c');
// =>undefined 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM