使用字符串来访问多维对象?

时间:2014-03-25 23:56:39

标签: javascript

我们说我有一个字符串:'first.second.last'

我也有一个对象:

{
    'first': {
        'second' : {
            'last': "value"
        }
    }
}

如何使用该字符串访问"value"

3 个答案:

答案 0 :(得分:2)

像这样......

var o = {
    'first': {
        'second' : {
            'last': "value"
        }
    }
};
var s = 'first.second.last';
var val = s.split('.').reduce(function(p, c) {
    return p.hasOwnProperty(c) && p[c] || p;
}, o);

这会钻入您的对象并找到匹配的最深的键。相反,如果您未能匹配某个键,则需要返回null,请将reduce回调更改为

function(p, c) {
    return p && p.hasOwnProperty(c) && p[c] || null;
}

如果您需要Array.prototype.reduce的旧版支持,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Polyfill

答案 1 :(得分:1)

这不是一个数组,它是一个对象。如果您想访问该对象中的last,如果有一个名为example的内容的变量:

example['first']['second']['third']

如果你想要一个你不确定深度的动态设置,请尝试以下方法:

var myString = 'first.second.last'
var myObj = {
    'first': {
        'second' : {
            'last': "value"
        }
    }
}

myString.split('.').forEach(function(item) {
   myObj = myObj[item]    
})

在最后,值将具有您想要的输出。有人可能现在是一个简单的工具或库,它可以完全实现这一点,或者更实用的方法来应用这种方法,遗憾的是,此时并没有想到任何更聪明的东西。

答案 2 :(得分:0)

您可以访问类似于使用[]表示法的数组的对象。如果您将字符串拆分为它,您可以转到sample["first"]["second"]["third"]

因此,我认为这应该有效:

var sample = {
    'first': {
        'second' : {
            'last': "value"
        }
    }
}

var str = "first.second.last";
var current = sample;
str.split('.').forEach(function(prop) {
   current = current[prop];
})
return current;