JavaScript:通过其他数组元素的索引访问ArrayElement?array[array[0]返回undefin

JavaScript: Accessing ArrayElement by index of other Array Element? array[array[0]] returns undefined

本文关键字:array undefin 返回 ArrayElement 访问 其他 数组元素 索引 JavaScript      更新时间:2024-02-24

我正在尝试制作一个函数,它接受7位代码(至少),然后加载字符的图像/元素,从而从代码中创建一个字符。

我写了这个代码:

<script type="text/javascript">
var skins = [];
skins["w"] = "http://example.com/char_elements/base.png";
var eyes = [];
eyes["b"] = "http://example.com/char_elements/eyes/blue.png";
eyes["g"] = "http://example.com/char_elements/eyes/green.png";
eyes["r"] = "http://example.com/char_elements/eyes/red.png";
var hair = [];
hair["b"] = "http://example.com/char_elements/hair/black.png";
hair["w"] = "http://example.com/char_elements/hair/blond.png";
hair["s"] = "http://example.com/char_elements/hair/brown.png";
var mouth = [];
mouth["h"] = "http://example.com/char_elements/mouth/happy.png";
var pants = [];
pants["s"] = "http://example.com/char_elements/pants/shorts.png";
var shoes = [];
shoes["b"] = "http://example.com/char_elements/shoes/black.png";
var torso = [];
torso["s"] = "http://example.com/char_elements/torso/shirt.png"
function LoadChar(code){
var data = code.split(/(?=[a-z])/i);
var skins = [skins[data[0]], eyes[data[1]], hair[data[2]], mouth[data[3]], pants[data[4]], shoes[data[5]], torso[data[6]]];
document.getElementById("out").innerHTML = skins.toString();
}
</script>
<div id="out"></div>

但是,当我调用LoadChar("wgbhsbs")时;

它刺痛了我"无法读取未定义的属性'w'"

我还是JS中数组的新手,所以我确信我犯了一些简单的语法错误或做了一些错误。

所以它的作用是:

1) 接受代码并将其拆分为7个元素(总是7个,没有其他元素),将其作为数组存储在"data"变量中。2) 通过加载:skin[代码中的数字]和其他元素来构建"skins"数组。3) 出于测试目的,我试图输出skins数组,但它在步骤2停止了。

对此有什么解释吗?

您正在重新创建先前定义的skins变量。

对函数中的变量使用不同的名称,就可以了。

var skins = [];
skins["w"] = "http://example.com/char_elements/base.png";
var eyes = [];
eyes["b"] = "http://example.com/char_elements/eyes/blue.png";
eyes["g"] = "http://example.com/char_elements/eyes/green.png";
eyes["r"] = "http://example.com/char_elements/eyes/red.png";
var hair = [];
hair["b"] = "http://example.com/char_elements/hair/black.png";
hair["w"] = "http://example.com/char_elements/hair/blond.png";
hair["s"] = "http://example.com/char_elements/hair/brown.png";
var mouth = [];
mouth["h"] = "http://example.com/char_elements/mouth/happy.png";
var pants = [];
pants["s"] = "http://example.com/char_elements/pants/shorts.png";
var shoes = [];
shoes["b"] = "http://example.com/char_elements/shoes/black.png";
var torso = [];
torso["s"] = "http://example.com/char_elements/torso/shirt.png"
function LoadChar(code){
  var data = code.split(/(?=[a-z])/i);
  var other_variable = [skins[data[0]], eyes[data[1]], hair[data[2]], mouth[data[3]],   pants[data[4]], shoes[data[5]], torso[data[6]]];
  alert(other_variable.toString());
}
LoadChar("wgbhsbs");

您正在定义对象的属性。不是数组。

更改

var skins = [];
skins["w"] = "http://example.com/char_elements/base.png";

var skins = {};
skins.w = "http://example.com/char_elements/base.png";

此外,正如LcSalazar所指出的,您正在LoadChar函数中重新定义skins

Fiddle