I've seen quite some related questions and google results, but none seem to match my problem.
I'm getting a string "header.h2" which I want to contencate to 'var objects
'.
So I want objects.header.h2
(which contains more hash data).
However, I don't want to use eval() or the often suggested buttons[]
for the obvious reason that buttons[header.h2
] won't work and I would need buttons[header][h2]
.
So how can I remain the object notation, or in the worst case, solve my problem?
Just a quick sketch of a possible way:
Your data:
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';
Using a helper function:
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;
}
Or making it available to all objects: (personally, I don't like this...)
Object.prototype.access = function (accessor) {
var keys = accessor.split('.'),
result = this;
while (keys.length > 0) {
var key = keys.shift();
if (typeof result[key] !== 'undefined') {
result = result[key];
}
else {
result = null;
break;
}
}
return result;
};
Debug output:
console.log(
helper(data, accessor), // will return 'f'
data.access(accessor) // will return 'f'
);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With