Search code examples
javascriptjsonobject-literal

Help adding new property to object literal


Why is this returning: tracker.paramsToTrack is undefined

var tracker = {};
var paramsToTrack = ['a', 'b', 'c', 'd', 'e'];
for (p in paramsToTrack)
{
    if(params[paramsToTrack[p]])
    {
        tracker.paramsToTrack[p] = params[paramsToTrack[p]];
    }

}
console.log(tracker);

I'm basically checking params if 'a' through 'e' are present. If so, add them to the tracker object like so:

tracker.a = stuff

tracker.b = stuff

Thoughts on what I'm doing wrong here?


Solution

  • tracker.paramsToTrack[p]
    

    Should probably be

    tracker[paramsToTrack[p]]
    

    Also, and not that you asked, you may want to eliminate the redundant array lookups:

    var tracker = {};
    var paramsToTrack = ['a', 'b', 'c', 'd', 'e'];
    var paramName;
    for (p in paramsToTrack)
    {
        paramName = paramsToTrack[p];
        if(params[paramName])
        {
            tracker[paramName] = params[paramName];
        }
    
    }
    console.log(tracker);
    

    Or better yet, if you are working in a modern Javascript environment:

    paramsToTrack.forEach(function (paramName) {
        if(params[paramName])
        {
            tracker[paramName] = params[paramName];
        }
    });