Retourneer array van functie

–Opgelost door Elliot B. Bedankt!
Kan ook rekening houden met de andere wijzigingen.

Hier is het resultaat. Bedankt allemaal voor de snelle antwoorden! http://dl.dropbox.com/u/18785762/Rust/index.html

Ik ben een spel in javascript aan het schrijven en ik wil de bestanden voor het matchen van blok-ID’s met bestanden in een apart .js-bestand van de kaartcompiler bewaren, zodat ik dingen gemakkelijk kan bewerken. De ID’s worden echter in een array opgeslagen en ik krijg het niet voor elkaar om de retourfunctie correct te gebruiken. Hulp?

drawmap.js:

function drawmap() {
    var images = BlockID();
    var level = [
    "ssssssssssssssssssssss",
    "sgggggggggCCCCCdddddss",
    "ssssssssss     sssssss"
    ];
    var top = 100;
    var left = 100;
    var mytop = top;
    var myleft = left;
    for (y=0; y<level.length; ++y) {
        var row = level[y];
        for (x=0; x < row.length; ++x) {
            var c = row.charAt(x);
            if(c != ' ') {
                img_create(images[c], mytop, myleft);
            }
            mytop += 13;
            myleft += 27;
        }
        mytop = top + (y+1)*13;
        myleft = left - (y+1)*27;
    }
}

mapread.js:

function BlockID() {
    var IDs = new Array();
        images['s'] = "Images/Block_01.png";
        images['g'] = "Images/Block_02.png";
        images['C'] = "Images/Block_03.png";
        images['d'] = "Images/Block_04.png";
    return IDs;
}

Antwoord 1, autoriteit 100%

Wijzig dit minimaal:

function BlockID() {
    var IDs = new Array();
        images['s'] = "Images/Block_01.png";
        images['g'] = "Images/Block_02.png";
        images['C'] = "Images/Block_03.png";
        images['d'] = "Images/Block_04.png";
    return IDs;
}

Hiervoor:

function BlockID() {
    var IDs = new Object();
        IDs['s'] = "Images/Block_01.png";
        IDs['g'] = "Images/Block_02.png";
        IDs['C'] = "Images/Block_03.png";
        IDs['d'] = "Images/Block_04.png";
    return IDs;
}

Er zijn een paar oplossingen om op te wijzen. Eerst, imagesis niet gedefinieerd in uw oorspronkelijke functie, dus het toewijzen van eigenschapswaarden eraan zal een fout opleveren. We corrigeren dat door imageste wijzigen in IDs. Ten tweedewil je een Objectretourneren, niet een Array. Aan een object kunnen eigenschapswaarden worden toegewezen die lijken op een associatieve array of hash – een array kan dat niet. Dus veranderen we de declaratie van var IDs = new Array();in var IDs = new Object();.

Na die wijzigingen werkt je code prima, maar deze kan verder vereenvoudigdworden. U kunt steno-notatie (d.w.z. object letterlijke eigenschapswaarde steno) gebruiken om het object te maken en het onmiddellijk terug te geven:

function BlockID() {
    return {
            "s":"Images/Block_01.png"
            ,"g":"Images/Block_02.png"
            ,"C":"Images/Block_03.png"
            ,"d":"Images/Block_04.png"
    };
}

Antwoord 2, autoriteit 27%

Uw BlockID-functie gebruikt de ongedefinieerde variabele images, wat tot een fout zal leiden. Gebruik hier ook geen Array– JavaScripts key-value-maps zijn gewone objecten:

function BlockID() {
    return {
        "s": "Images/Block_01.png",
        "g": "Images/Block_02.png",
        "C": "Images/Block_03.png",
        "d": "Images/Block_04.png"
    };
}

Antwoord 3, autoriteit 16%

netter:

function BlockID() {
  return {
    "s":"Images/Block_01.png",
    "g":"Images/Block_02.png",
    "C":"Images/Block_03.png",
    "d":"Images/Block_04.png"
   }
}

of gewoon

var images = {
  "s":"Images/Block_01.png",
  "g":"Images/Block_02.png",
  "C":"Images/Block_03.png",
  "d":"Images/Block_04.png"
}

Other episodes