Javascript:通过将路径作为字符串传递给对象来获取对象的深层值
Javascript: Get deep value from object by passing path to it as string
可能重复:
使用字符串键访问嵌套的JavaScript对象
也许标题不够清楚,我只是不知道如何具体说明我要找什么,而且我的英语真的很差,对不起。
我正在尝试创建一个函数,它返回对象值,但也能很好地处理嵌套对象。例如:
var obj = {
foo: { bar: 'baz' }
};
我想通过向函数提供字符串"foo.bar"来访问obj.foo.bar的值。
function(obj, path) {
// Path can be "foo.bar", or just "foo".
}
谢谢!
这是正确的:
var deep_value = function(obj, path){
for (var i=0, path=path.split('.'), len=path.length; i<len; i++){
obj = obj[path[i]];
};
return obj;
};
这是证明/演示:jsfiddle.net/tadeck/5Pt2q/13/
编辑:我删除了多余的变量,缩短了代码。
考虑一下:
var obj = {
foo: { bar: 'baz' }
};
function deepFind(obj, path) {
var paths = path.split('.')
, current = obj
, i;
for (i = 0; i < paths.length; ++i) {
if (current[paths[i]] == undefined) {
return undefined;
} else {
current = current[paths[i]];
}
}
return current;
}
console.log(deepFind(obj, 'foo.bar'))
你的意思是这样的吗?这是一个递归版本
function recLookup(obj, path) {
parts = path.split(".");
if (parts.length==1){
return obj[parts[0]];
}
return recLookup(obj[parts[0]], parts.slice(1).join("."));
}
请参阅http://jsfiddle.net/kExSr/
类似于:
function(obj, path) {
var current=obj;
path.split('.').forEach(function(p){ current = current[p]; });
return current;
}
您需要将字符串拆分到点上,然后重复索引到对象中,例如沿着以下行:
function goDeep(obj, path) {
var parts = path.split('.'),
rv,
index;
for (rv = obj, index = 0; rv && index < parts.length; ++index) {
rv = rv[parts[index]];
}
return rv;
}
实例
这之所以有效,是因为您可以通过两种不同的方式访问对象的属性:有使用文字的虚线语法(obj.foo
),也有使用字符串的括号语法(obj["foo"]
)。在后一种情况下,字符串可以是任何表达式的结果,而不必是字符串文字。在所有中,rv
设置为相同的值:
rv = obj.foo.bar;
// Or
rv = obj.foo["bar"];
// Or
f = "foo";
rv = obj[f].bar;
// Or
s = "b";
rv = obj.foo[s + "ar"];
相关文章:
- Backbone虹吸以获取对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 使用fabric.js从矩形区域获取对象,并将该区域绘制到画布上
- Undercore.js获取对象数组中键对象的值
- 从数组中获取对象
- 在Sahi中获取[对象]作为按钮值
- 如何从jquery自动完成中获取对象值
- 从数组NodeJs中获取对象值
- 如何在javascript中在运行时获取对象/数组
- 从Javascript中谓词的数组中获取对象
- 如何获取对象名称
- 打字.如何获取对象'的属性名称与其值不同
- 扩展引导程序的typeahead以便获取对象而不是字符串
- 正在获取对象内部数组中的对象总数
- JavaScript:获取对象的评估属性
- minko从dom获取对象
- 如何获取对象
- 从类内部获取对象名称(JavaScript)
- 如何获取对象名称
- 获取对象的所有可能组合,其中值的总和与数字匹配