Javascript字符串到对象引用(不带eval()或索引)
我已经看到了很多相关的问题和谷歌搜索结果,但没有一个和我的问题相匹配 我得到一个字符串“header.h2”,我想将其与“Javascript字符串到对象引用(不带eval()或索引),javascript,javascript-objects,Javascript,Javascript Objects,我已经看到了很多相关的问题和谷歌搜索结果,但没有一个和我的问题相匹配 我得到一个字符串“header.h2”,我想将其与“var objects”关联。 所以我想要objects.header.h2(其中包含更多散列数据) 但是,我不想使用eval()或经常建议的按钮[],原因很明显,按钮[header.h2]不起作用,我需要按钮[header][h2] 那么,我如何保持对象符号,或者在最坏的情况下,如何解决我的问题呢?简单介绍一下可能的方法: 您的数据: var data = [ {f
var objects
”关联。
所以我想要objects.header.h2
(其中包含更多散列数据)
但是,我不想使用eval()或经常建议的按钮[]
,原因很明显,按钮[header.h2
]不起作用,我需要按钮[header][h2]
那么,我如何保持对象符号,或者在最坏的情况下,如何解决我的问题呢?简单介绍一下可能的方法: 您的数据:
var data = [
{foo: 1, bar: 2, foobar: [
'a', 'b', 'c'
]},
{foo: 1, bar: 2, foobar: [
'd', 'e', 'f'
]},
{foo: 1, bar: 2, foobar: [
'g', 'h', 'i'
]}
];
var accessor = '1.foobar.2';
function helper(data, accessor) {
var keys = accessor.split('.'),
result = data;
while (keys.length > 0) {
var key = keys.shift();
if (typeof result[key] !== 'undefined') {
result = result[key];
}
else {
result = null;
break;
}
}
return result;
}
console.log(
helper(data, accessor), // will return 'f'
data.access(accessor) // will return 'f'
);
使用辅助函数:
var data = [
{foo: 1, bar: 2, foobar: [
'a', 'b', 'c'
]},
{foo: 1, bar: 2, foobar: [
'd', 'e', 'f'
]},
{foo: 1, bar: 2, foobar: [
'g', 'h', 'i'
]}
];
var accessor = '1.foobar.2';
function helper(data, accessor) {
var keys = accessor.split('.'),
result = data;
while (keys.length > 0) {
var key = keys.shift();
if (typeof result[key] !== 'undefined') {
result = result[key];
}
else {
result = null;
break;
}
}
return result;
}
console.log(
helper(data, accessor), // will return 'f'
data.access(accessor) // will return 'f'
);
或使其可供所有对象使用(就个人而言,我不喜欢这个…)
调试输出:
var data = [
{foo: 1, bar: 2, foobar: [
'a', 'b', 'c'
]},
{foo: 1, bar: 2, foobar: [
'd', 'e', 'f'
]},
{foo: 1, bar: 2, foobar: [
'g', 'h', 'i'
]}
];
var accessor = '1.foobar.2';
function helper(data, accessor) {
var keys = accessor.split('.'),
result = data;
while (keys.length > 0) {
var key = keys.shift();
if (typeof result[key] !== 'undefined') {
result = result[key];
}
else {
result = null;
break;
}
}
return result;
}
console.log(
helper(data, accessor), // will return 'f'
data.access(accessor) // will return 'f'
);
我将创建一个“填充”方法,该方法根据给定的点符号字符串创建对象:
var populate = function(obj, str) {
var ss=str.split(/\./), len=ss.length, i, o=obj;
for (i=0; i<len; i++) {
if (!o[ss[i]]) { o[ss[i]] = {}; }
o = o[ss[i]];
}
return obj;
};
var objects = populate({}, 'header.h2');
objects.header.h2; // => Object {}
populate(objects, 'foo.bar.gah.zip');
objects.foo.bar.gah.zip; // => Object {}
var populate=function(obj,str){
var ss=str.split(/\./),len=ss.length,i,o=obj;
对于(i=0;i对象{}
填充(对象“foo.bar.gah.zip”);
objects.foo.bar.gah.zip;//=>Object{}
需要测试,但应该会让你更接近你的目标。所以在点上拆分,然后迭代它们,并将它们设置为多维数组?看起来不错!