4

So I'm grabbing a JSON via AJAX, but need to re-configure it. Part of that means using a string contained in a variable as the property name of a nested object.

But Javascript doesn't allow this. It treats variables as literal strings, instead of reading the value.

Here's a snippet:

var pvm.exerciseList = [];

$.get('folder_get.php', function(data){
    var theList = $.parseJSON(data);
    $.each(theList, function(parentFolder, files) {
        var fileList = [];
        $.each(files, function(url, name) {
            thisGuy.push({fileURL: url, fileName: name});
        });
        pvm.exerciseList.push({parentFolder: fileList});
    });
});

Is there anyway around this? I need to extract the string contained in "parentFolder." Right now, JS is just interpreting it literally.

1

1 Answer 1

9

Use the [] syntax to resolve a variable as a property name. This might require an intermediary {}:

$.get('folder_get.php', function(data){
    var theList = $.parseJSON(data);
    $.each(theList, function(parentFolder, files) {
        var fileList = [];
        $.each(files, function(url, name) {
            thisGuy.push({fileURL: url, fileName: name});
        });

        // Make an object    
        var tmpObj = {};
        // And give it a property with the current value of parentFolder
        tmpObj[parentFolder] = fileList;
        // Then push it onto the array
        pvm.exerciseList.push(tmpObj);
    });
});
Sign up to request clarification or add additional context in comments.

3 Comments

Awesome! Thanks so much. Javascript has little "gotchas" hiding around every corner.
@BenjaminAllison It's a very flexible and nuanced language, worth learning in detail. Not that you asked, but I recommend reading Douglas Crockfor's JavaScript: The good parts to get a handle on where the language's dark alleys and bright spots lie.
I've read it about 3 times, and will probably read it another 20 times!!! Thanks again Michael.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.