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 函数来让我做到这一点(当然也让我使用相同的函数获取非嵌套属性)。
I tried getter('bar.baz')
and getter('[bar][baz]')
但那些没有用。
我想我可以解析点或括号(如下所示:在javascript中,测试对象图中深层嵌套的属性?)。有更干净的方法吗? (当然除了评估。)
特别是因为我需要在循环中多次对一堆数组元素进行正确的深度设置。
您可以使用基于路径字符串的深度访问函数。请注意,属性名称中不能包含任何句点。
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
如果访问字符串为空,则返回该对象。否则,继续沿着访问路径直到倒数第二个访问者。如果这是一个对象,则返回最后一个object[accessor]
价值。否则,返回未定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)