只需要使用一个循环来迭代names
并获取当前名称的下一个嵌套对象。假值或数组的末尾应停止循环。
var obj = options;
var i = 0;
while (obj && i < names.length)
obj = obj[names[i++]];
或者直接使用.reduce()
names.reduce(function(obj, name) {
return obj && obj[name];
}, options);
当然,如果您喜欢,您可以命名并重复使用该函数。
function toPropertyIn(obj, name) {
return obj && obj[name];
}
names.reduce(toPropertyIn, options);
创建一个getter/setter方法:
function nestedProp(obj, names, value) {
if (arguments.length > 1)
var setProp = names.pop();
var res = names.reduce(function(obj, name) {
return obj && obj[name];
}, options);
if (res && setProp !== undefined)
res[setProp] = value;
else
return res;
}
nestedProp(options, names, "foo");
var val = nestedProp(options, names);