var arr = { foo : 1, bar: { baz : 2 }, bee : 3 }
function getter(variable) {
return arr[variable];
}
如果我想要“foo”与“bee”,我只需执行arr[variable]
- 这很简单,函数就可以做到这一点。
但是如果我想获得 arr.bar.baz
AKA arr[bar][baz]
该怎么办?
我可以将什么传递给 getter 函数来让我做到这一点(当然也让我使用相同的函数获取非嵌套属性)。
我尝试了 getter('bar.baz')
和 getter('[bar][baz]')
但这些都不起作用。
我想我可以解析点或括号(如下所示: In javascript, test for property deeply nested in object graph? )。有更干净的方法吗? (当然除了评估。)
特别是因为我需要在循环中为一堆数组元素多次正确设置深度。
最佳答案
您可以使用基于路径字符串的深度访问函数。请注意,属性名称中不能包含任何句点。
function getPropByString(obj, propString) {
if (!propString)
return obj;
var prop, props = propString.split('.');
for (var i = 0, iLen = props.length - 1; i < iLen; i++) {
prop = props[i];
var candidate = obj[prop];
if (candidate !== undefined) {
obj = candidate;
} else {
break;
}
}
return obj[props[i]];
}
var obj = {
foo: {
bar: {
baz: 'x'
}
}
};
console.log(getPropByString(obj, 'foo.bar.baz')); // x
console.log(getPropByString(obj, 'foo.bar.baz.buk')); // undefined
如果访问字符串为空,则返回该对象。否则,继续沿着访问路径直到倒数第二个访问者。如果这是一个对象,则返回最后一个对象[访问器]
值。否则,返回未定义。
关于javascript - 在javascript中如何动态获取对象的嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44901032/