gpt4 book ai didi

javascript - 在javascript中如何动态获取对象的嵌套属性

转载 作者:行者123 更新时间:2023-12-02 23:39:30 27 4
gpt4 key购买 nike

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/6906108/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com