Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:通过其他数组元素的索引访问ArrayElement?数组[array[0]]返回未定义的_Javascript_Arrays - Fatal编程技术网

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

JavaScript:通过其他数组元素的索引访问ArrayElement?数组[array[0]]返回未定义的,javascript,arrays,Javascript,Arrays,我试图使函数接受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"]

我试图使函数接受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>

var=[];
皮肤[“w”]=“http://example.com/char_elements/base.png";
var眼睛=[];
眼睛[“b”]=”http://example.com/char_elements/eyes/blue.png";
眼睛[“g”]=”http://example.com/char_elements/eyes/green.png";
眼睛[“r”]=“http://example.com/char_elements/eyes/red.png";
var hair=[];
头发[“b”]=“http://example.com/char_elements/hair/black.png";
头发[“w”]=“http://example.com/char_elements/hair/blond.png";
头发[“s”]=“http://example.com/char_elements/hair/brown.png";
var-mouth=[];
嘴[“h”]=“http://example.com/char_elements/mouth/happy.png";
var=[];
裤子[“s”]=“http://example.com/char_elements/pants/shorts.png";
var=[];
鞋[“b”]=”http://example.com/char_elements/shoes/black.png";
var=[];
躯干[“s”]=“http://example.com/char_elements/torso/shirt.png"
函数LoadChar(代码){
var数据=代码分割(/(?=[a-z])/i);
变量皮肤=[皮肤[数据[0]]、眼睛[数据[1]]、头发[数据[2]]、嘴巴[数据[3]]、裤子[数据[4]]、鞋子[数据[5]]、躯干[数据[6]];
document.getElementById(“out”).innerHTML=skins.toString();
}
然而,当我调用LoadChar(“wgbhsb”)

它警告我“无法读取未定义的属性“w”

我还不熟悉JS中的数组,所以我确信我犯了一些简单的语法错误或者做了一些有点错误的事情

因此,它的作用是:

1) 接受代码并将其拆分为7个元素(始终为7个,无其他元素)将其作为数组存储在“data”变量中。 2) 通过加载:skin[number from code]和其他元素来构建“skins”数组。 3) 出于测试目的,我尝试输出皮肤数组,但它在步骤2停止


对此有什么解释吗?

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

改变

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

正如LcSalazar所指出的,您还在LoadChar函数中重新定义
皮肤


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

改变

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

正如LcSalazar所指出的,您还在LoadChar函数中重新定义
皮肤


您正在重新创建先前定义的
皮肤
变量

为函数内的变量使用不同的名称,就可以了

var皮肤=[];
皮肤[“w”]=“http://example.com/char_elements/base.png";
var眼睛=[];
眼睛[“b”]=”http://example.com/char_elements/eyes/blue.png";
眼睛[“g”]=”http://example.com/char_elements/eyes/green.png";
眼睛[“r”]=“http://example.com/char_elements/eyes/red.png";
var hair=[];
头发[“b”]=“http://example.com/char_elements/hair/black.png";
头发[“w”]=“http://example.com/char_elements/hair/blond.png";
头发[“s”]=“http://example.com/char_elements/hair/brown.png";
var-mouth=[];
嘴[“h”]=“http://example.com/char_elements/mouth/happy.png";
var=[];
裤子[“s”]=“http://example.com/char_elements/pants/shorts.png";
var=[];
鞋[“b”]=”http://example.com/char_elements/shoes/black.png";
var=[];
躯干[“s”]=“http://example.com/char_elements/torso/shirt.png"
函数LoadChar(代码){
var数据=代码分割(/(?=[a-z])/i);
var other_变量=[皮肤[数据[0]]、眼睛[数据[1]]、头发[数据[2]]、嘴巴[数据[3]]、裤子[数据[4]]、鞋子[数据[5]]、躯干[数据[6]];
警报(其他_变量.toString());
}

LoadChar(“WGBHSB”)您正在重新创建先前定义的
皮肤
变量

为函数内的变量使用不同的名称,就可以了

var皮肤=[];
皮肤[“w”]=“http://example.com/char_elements/base.png";
var眼睛=[];
眼睛[“b”]=”http://example.com/char_elements/eyes/blue.png";
眼睛[“g”]=”http://example.com/char_elements/eyes/green.png";
眼睛[“r”]=“http://example.com/char_elements/eyes/red.png";
var hair=[];
头发[“b”]=“http://example.com/char_elements/hair/black.png";
头发[“w”]=“http://example.com/char_elements/hair/blond.png";
头发[“s”]=“http://example.com/char_elements/hair/brown.png";
var-mouth=[];
嘴[“h”]=“http://example.com/char_elements/mouth/happy.png";
var=[];
裤子[“s”]=“http://example.com/char_elements/pants/shorts.png";
var=[];
鞋[“b”]=”http://example.com/char_elements/shoes/black.png";
var=[];
躯干[“s”]=“http://example.com/char_elements/torso/shirt.png"
函数LoadChar(代码){
var数据=代码分割(/(?=[a-z])/i);
var other_变量=[皮肤[数据[0]]、眼睛[数据[1]]、头发[数据[2]]、嘴巴[数据[3]]、裤子[数据[4]]、鞋子[数据[5]]、躯干[数据[6]];
警报(其他_变量.toString());
}


LoadChar(“WGBHSB”)
您正在为数组创建属性,而不是索引。数组不应使用字母或字符串作为键。除了URL,是的,这是相同的。您真正的问题是您定义了两次
外观,一次在函数外部,然后在函数内部定义一个同名的局部变量,它没有
w
属性您正在为数组创建属性,而不是索引。数组不应该使用字母或字符串作为键。除了URL,是的,它是相同的。您真正的问题是您定义了两次
skins
,一次在函数外部,然后在函数内部定义一个同名的局部变量,它没有
w
属性虽然更合适,但不会有任何区别。数组是对象,可以像任何其他对象一样通过字符串对属性进行索引。因此,我访问皮肤/眼睛/头发元素,如皮肤。数据[0]是否正确?@Arletiss:不,您仍然可以作为
皮肤[“w”]
@Arletiss检查Fiddle@Jonathan检查,现在修改我的代码。感谢您为解决方案做出的贡献。虽然更合适,但不会产生任何影响。数组是对象,可以对其属性进行索引