How can I refer to an object element dynamically during a loop by using an array, something like this:
var obj = {};
var lvl = ['x','y','z'];
var ol = [];
for (var l in lvl){
ol.push( lvl[l] )
obj[ol] = 'someval'
}
so where the reference may be obj[x][y][z] so each time the loop iterates, an additional key reference is appended, but I do not know how many levels there will be.
Not sure if I have explained that very well ?!
asked Jan 7, 2015 at 4:37
crankshaft
2,7075 gold badges47 silver badges84 bronze badges
2 Answers 2
Based on how you answered my comment I believe this code will provide the nested object structure you are looking for.
var obj = {};
var lvl = ['x','y','z'];
var ol = {};
for (var i = 0; i < lvl.length; i++){
obj[i] = {};
ol = obj[key];
}
Sign up to request clarification or add additional context in comments.
2 Comments
slebetman
the
var key in lvl bit is wrong because it would give you 0,1,2,length not x,y,z. Found out the hard way when testing my own answer. Use foreach or a regular for(x=0;x<lvl.length;x++) loop.slebetman
Alternatively, you can change
lvl to be {x:'',y:'',z:''} instead of an array.You mean you want someval to be the value of obj.x.y.z? You can always refer to the newly created levels using a variable:
var obj = {};
var levels = ['x','y','z'];
var pointer = obj;
for (var l=0; l<levels.length; l++) {
key = levels[l];
if (l < levels.length-1) { // if not last element
pointer[key] = {};
pointer = pointer[key];
}
else { // if last element
pointer[key] = 'someval';
}
}
console.log(obj); // should log {x:{y:{z:"someval"}}}
answered Jan 7, 2015 at 4:48
slebetman
115k19 gold badges148 silver badges181 bronze badges
1 Comment
slebetman
OK. Finally got it working. Remember, variables are references only when they're pointing to arrays or objects. But they're values once you assign a string or number to them.. arrrrgh...
lang-js
obj[ol]this will keep an array as key of object. or do you wantobj[ol[l]].