使用字符串访问多维对象
Use string to access multidimensional object?
假设我有一个字符串:'first.second.last'
我还有一个对象:
{
'first': {
'second' : {
'last': "value"
}
}
}
我如何使用该字符串访问"value"
?
像这样…
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
那不是一个数组,而是一个对象。如果你想访问该对象中的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]
})
在最终值将有您想要的输出。现在,有人可能会使用一个简单的util或库来完成此操作,或者使用更实用的方法来应用此方法,不幸的是,此时没有更智能的方法。
可以像使用[]表示法访问数组一样访问对象。如果你把这个字符串拆分你可以输入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;
相关文章:
- 如何使用此从对象访问构造函数
- LokiJS与标准Javascript对象访问
- JavaScript子对象访问自己的值
- Javascript嵌套对象访问根级别
- 即使使用 angular.fromJson() 也无法从 json 对象访问字符串
- 从表单到 Ajax 的动态对象访问
- 将 NodeJS 模块范围变量作为对象访问
- 能够从Meteor中的辅助对象访问特定值
- 从JavaScript对象访问数据's数组成员变量
- 如何从 React 中的事件对象访问自定义属性
- 函数中的对象访问;不起作用
- 如何在javascript中从JSON对象访问数组
- 如何从C#.Net Webbrowser对象访问javascript变量
- Javascript中最快的类/对象访问/实例化是什么
- 覆盖对象访问 JavaScript
- 如何从 jquery 中的另一个对象访问在一个对象中声明的变量
- 从 JavaScript 对象访问变量
- 如何从范围对象访问数据到指令
- 从vue.js中的对象访问v-repeat-overarray中的属性
- jQuery:从具有一个类的多个实例的对象访问元素