如何在不使用for语句的情况下创建for循环

时间:2013-11-29 13:13:31

标签: javascript

我正在编写地图编辑器,我需要让地图编辑器运行得更快,我被告知删除每个嵌套for循环并在没有for语句的情况下执行它们,有人可以指导我如何做这样的事情?

var tiles = [];
var draw = 0;
var w = 0;
var h = 0;

$(document).ready(function () {
    $('#tile-selector img').click(function () {
        draw = $(this).attr("tile");
    });
});

function run() {
    w = $("#w").val();
    h = $("#h").val();

    for (var x = 0; x < h; x++) {
        tiles[x] = [];
        for (y = 0; y < w; y++) {
            tiles[y] = [];
            $("#box").append("<img src='src/" + draw + ".gif' x='" + x + "' y='" + y + "' height='15' width='15'></img>");
            tiles[x][y] = draw;
        }
        $("#box").append("<br />");
    }


    $("#box img").click(function () {
        $(this).attr("src", "src/" + draw + ".gif");
        tiles[$(this).attr("x")][$(this).attr("y")] = draw;
    });
}

function end() {
    var output = "";
    for (var x = 0; x < w; x++) {
        for (var y = 0; y < h; y++) {
            if (tiles[x][y] > 0) {
                output += "tiles[" + x + "+" + y + "*width] =" + tiles[x][y] + ";\r\n";
            }
        }
    }
    $("#output").val(output);
}

删除第一个循环并放置tile [y] = [];在嵌套循环中

1 个答案:

答案 0 :(得分:0)

对于这个循环

    for(var y = 0; y < h; y++) {
        for (x = 0; x < w; x++) {
            $("#box").append("<img src='src/" + draw +".gif' x='"+ x +"' y='"+ y +"' height='15' width='15'></img>");              
            tiles[x][y] = draw;
        }
        $("#box").append("<br />");
    }

一些事情,改变循环的顺序可能会有所帮助,因为javascript使用行主要顺序。

$('#box')移到外面会有助于甚至将它们全部删除,例如

    var box = "";
    for(var x = 0; z < w; x++) {
        for (y = 0; y < h; y++) {
            box += "<img src='src/" + draw +".gif' x='"+ x +"' y='"+ y +"' height='15' width='15'></img>";              
            tiles[x][y] = draw;
        }
        box += "<br />";
    }
    $('#box').append(box);
    box = null;

应该加快速度