是否可以在数组中存储值的数字和名称?

时间:2016-02-20 01:07:05

标签: javascript arrays

我目前正在编写一个函数来预加载小型游戏所使用的所有图像以在数组上绘制。目前我将源路径存储在两个不同的数组中以解决这个问题,但是当从它获取值时,是否可以使用数字i和名称n?这将有助于以后更容易使用该值作为搜索我的图片,并使用gameimage [153]作为源值看起来不是很整洁,我宁愿使用gameimage [& #34;鳢"]

当前代码示例:

//add images to the gameimages array to be loaded before gamestart
//add the snake images
var gameimages = [];
gameimages.push("snake30px.png", "snake30pxdown.png", "snake30pxup.png","snake30pxauch.png");

var gameimagesnumber = gameimages.length;

//start the startGame() when all images in the gameimages array is loaded, to avoid albino snake and lack of stuff to crash into
//NOTE: This is kinda "hackish" as the images is just loaded to make sure it is cached in browser...
//they're not actually used, but seem to have the same effect :x
for(var i = 0; i < gameimagesnumber; i++){
    console.log("Loading " + gameimages[i]);
    var image = new Image();
    image.onload = function(){
        //add the image in gameimagesnames for easier use in the code when needed
        gameimagesnames[this.src.substring(this.src.lastIndexOf("/") + 1,this.src.length - 4)] = this.src;
        checkforgamestart();
    };
    image.src = "images/" + gameimages[i];
}

//checking for gamestart
function checkforgamestart(){
    if(gameimagesnumber > 1) gameimagesnumber--;
    else startGame();
}

2 个答案:

答案 0 :(得分:3)

绝对!

在JS中,您可以创建任何数据类型的数组。您还可以访问对象。所以让我们结合这些。

var obj = {
    name: 'a test name',
    value: 1
}

var array = [obj];

array[0].name;  // == 'a test name'
array[0].value; // == 1

var anotherObj = {
    name: 'another name',
    value: 7
}

array.push(anotherObj);


array[1].name;  // == 'another name'
array[1].value; // == 7

更详细地阅读您的问题,我发现您还希望有一个可以从任一值中获取的get方法。这有点棘手。

提供的其他答案将执行此操作,但将数据存储在对象(不是数组)中的两个单独位置,并且还会丢失数组原型。

为了更好地在Array类类型中解决这个问题,让我们利用Array.filter!

array.filter(function(item) { return item.name === 'another name' })

这将为您提供一个元素的subArray,它们满足您在给定回调函数中提供的任何条件。在这种情况下,使用上面的数组,它将传回一个数组,其中包含一个元素; anotherObj

答案 1 :(得分:0)

如果您想同时访问,请使用对象

var arr = {}
arr[1] = arr['myKey'] = 'myValue'

然后您可以通过数字和按键访问它们。