通过变量的Javascript对象引用

通过变量的Javascript对象引用,javascript,Javascript,我有一个物体像: var theObject = { keyName1: { keyName2: value2, keyName3: value3, keyName4: value40 }, ..., keyName10: { keyName2: value6, keyName3: value7, keyName4: value8 } } 我知道我可以通过object[“keyName10”][“keyName3”]或object.keyName10.keyName3

我有一个物体像:

var theObject = { 
    keyName1: { keyName2: value2, keyName3: value3, keyName4: value40 },
    ...,
    keyName10: { keyName2: value6, keyName3: value7, keyName4: value8 }
}
我知道我可以通过
object[“keyName10”][“keyName3”]
object.keyName10.keyName3
但我需要的是将一个变量设置为类似搜索路径的值,并以某种方式将其传递给对象,然后直接获取值7

比如:

var path = keyName10.keyName3;
var myValue = theObject(path);
对象甚至可以深入到对象初始阶段。 现在,我正在解决它的可怕的寻找嵌套的循环。
我错过了更好的方法吗?

为什么不创建一个getter函数

var path = 'keyName10/keyName3'

function getTheThing(key){
    var parts = key.split("/")
    return theObject[parts[0]][parts[1]]
}

var myValue = getTheThing(path)
通过传递对象和getter的键,允许使用路径访问不同的对象,您可以使它更通用

var path = 'keyName10/keyName3'

function getTheThing(key, obj){
    var parts = key.split("/")
    return obj[parts[0]][parts[1]]
}

var myValue = getTheThing(path,theObject)

我只是想添加一个有趣的解决方案。我肯定不会这样使用它,但这个想法可能适合你的情况。我还质疑这种方法的效率

var theObject = { 
    keyName1: { keyName2: value2, keyName3: value3, keyName4: value40 },
    ...,
    keyName10: { keyName2: value6, keyName3: value7, keyName4: value8 }
}
var path = 'keyName10/keyName3';


function getProp(theObject, path){
    var parts = path.split("/"),
    idx = parts[0],
    newParts = parts.splice(0, 1),
    newPath = newParts.join("/"),
    obj = theObject[idx];

    // add some validation and error handling in case or error on path 
    // or missing property on obj


    // I do not like the line below, would need to find a better way to see
    // if the function return something or it does some recursion
    // need to figure the right condition to see if we are at des
    if(parts.length == 1) {
        return obj;
    } else {
       return getProp(obj, newPath);
    }
}

可能有帮助:

可能是var myValue=theObject['keyName10']['keyName3']的重复项吗?是的,可能是@Bertrand。这不是问题的全部所在。@Quentin在建议的帖子中使用了tangled Shugh(如可读性差)作为循环。和我现在做的差不多。寻找优雅和/或简单。你可以很容易地将其转换为递归函数,但循环是IMHO最简单的方法。对于两种方法,这是很好的。在对象初始/俄罗斯玩偶/嵌套对象结构的更深处,它将被打破。需要能够传入'keyName10/keyName3/newKey/anotherKey/lotsOfKeys',因为我的真实数据很广泛,我无法发布。不错。我可能会这样做。