【问题标题】:Return array from function从函数返回数组
【发布时间】:2012-08-17 01:42:26
【问题描述】:

--由 Elliot B 解决。谢谢! 也可以考虑其他修改。

这是结果。谢谢大家,快速解答! http://dl.dropbox.com/u/18785762/Rust/index.html

我正在用 javascript 编写游戏,我想将用于匹配块 ID 的文件保存在地图编译器的单独 .js 文件中,以便我可以轻松地进行编辑。但是,ID 存储在一个数组中,我似乎无法让它正确使用返回函数。有什么帮助吗?

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;
}

【问题讨论】:

  • 那么什么不能正常工作。您是否在控制台日志中收到错误?
  • images 更改为 IDs 它将起作用……
  • 我会分别使用“[ ]”或“{ }”,而不是“new Array()”或“new Object()”。
  • 我同意@ianpgall - 因此我的帖子:)

标签: javascript arrays function


【解决方案1】:

考虑到在 JavaScript 中数组也是对象,这可以写成:

function BlockID() {
    return new Array(
        "Images/Block_01.png", 
        "Images/Block_02.png", 
        "Images/Block_03.png", 
        "Images/Block_04.png" 
       );
    }

此代码将在浏览器窗口中显示数组的内容

window.onload=function(){
var s="";
var ar = BlockID(); //function return array
for(el in ar){
    s+=ar[el]+"</br>";
}
document.body.innerHTML=s; 
};

【讨论】:

    【解决方案2】:

    至少,改变这个:

    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;
    }
    

    到这里:

    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;
    }
    

    有几个修复需要指出。 首先images 未在您的原始函数中定义,因此为其分配属性值会引发错误。我们通过将images 更改为IDs 来纠正这个问题。 第二,您要返回Object,而不是Array。可以为对象分配类似于关联数组或哈希的属性值——数组不能。所以我们将var IDs = new Array();的声明改为var IDs = new Object();

    在这些更改之后,您的代码将可以正常运行,但可以进一步简化。您可以使用速记表示法(即对象字面量属性值速记)来创建对象并立即返回它:

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

    【讨论】:

    • 这里应该使用对象,而不是数组。
    • 谢谢!现在可以了。 15 分钟冷却时间结束后,我会接受答案。
    • @pimvdb 是对的。 @AidanEdwards 如果你不使用整数作为索引,Array() 没有意义。
    • @Aidan Edwards:数组基本上是带有索引的列表(使用[0] 等访问它们)。对象是通用键/值对,这就是您正在使用的。
    【解决方案3】:

    您的BlockID 函数使用了未定义的变量images,这将导致错误。此外,您不应在此处使用 Array - JavaScript 键值映射是普通对象:

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

    【讨论】:

      【解决方案4】:

      更整洁:

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

      或者只是

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

      【讨论】:

      • 我想将 ID 保存在单独的文件中,我可能会使用第一个。
      猜你喜欢
      • 1970-01-01
      • 2013-05-15
      • 2017-01-26
      • 2014-11-20
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多