我想通过字符串数组访问对象来获取值。
静态示例:输入:['a','b','c']
输出:function (t) { t.a.b.c; }
我想创建一个函数来解决任何数组的问题。
function (state) {
let value = state;
for (let i = 0; i < propNames.length; i++) {
value = value[propNames[i]];
}
return value;
};
其他解决方案是由减速器生成的函数。
这些正在工作。我想知道是否还有其他我没想到的更快的解决方案。
您可以测试here的算法。有一个可以添加代码的地方。
答案 0 :(得分:2)
一种快速的方法是遍历属性并顺序访问内部对象,您可以使用Array.reduce()
或for循环来实现:
const get = (obj, props) => props.reduce((out, p) => out && out[p] || undefined, obj);
const obj = { a: { b: { c: 5 } } };
console.log(get(obj, ['a', 'b', 'c']));
console.log(get(obj, ['a', 'b', 'c', 'd', 'e']));
或者,您可以使用eval()
来评估表达式,但是,这可能是最慢的表达方式,我不推荐它:
const get = (obj, props) => {
try {
return eval(`obj.${props.join('.')}`);
} catch {
return undefined;
}
}
const obj = { a: { b: { c: 5 } } };
console.log(get(obj, ['a', 'b', 'c']));
console.log(get(obj, ['a', 'b', 'c', 'd', 'e']));