Efficiency of looping though a text map to draw objects
Well, for starters, you could reduce operations to \$O(n^2)\$ by skipping your third loop:

var levels = [
    ["##########",
     "#        #",
     "#        #",
     "#        #",
     "#        #",
     "#  #     #",
     "#       ##",
     "#     #  #",
     "#S  #    #",
     "##########"]
];

for(var i = 0; i &lt; levels[0].length; i++){
    for(var j = 0; j &lt; levels[0][i].length; j++){
        var symbol = levels[0][i][j];
        console.log(symbol);
    }
}


I changed levelOne to a levels array where you can refer to each level by index, since you probably want to add more levels later on.

jsFiddle

Why do you define symbol outside of the loop, and re-declare it inside?

Regarding your platforms:

var platforms = [];

platforms.add = function(xPosition, yPosition, width, height, colour) {
    platforms.push(new Block(xPosition, yPosition, width, height, colour) );
};


You are just declaring an add method for that specific array instance. It also creates an enumerable property on the array which isn't good if someone happens to use for..in to iterate the array (which I wouldn't recommend in the first place). Why not simply call push directly?

If you insist on creating your own add method, in my opinion, platforms should be either its own "type" (if you plan to create several instances):

function platform(){
    this.blocks = [];
}

platform.prototype.addBlock(function(block){
    this.blocks.push(block);
});


Or if you know that you'll only use one platform, create a "static" object:

var platform = {
    blocks: [],
    addBlock: function(block){
        this.blocks.push(block);
    }
};