JavaScript: Доступ к ArrayElement по индексу другого элемента массива? array [array [0]] возвращает undefined

62
8

Я пытаюсь сделать функцию, которая принимает 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) Создает массив "скинов", загружая: скин [номер из кода] и тот же для других элементов. 3) В целях тестирования я пытаюсь вывести массив скинов, но он останавливается на шаге 2.

Есть ли какие-либо объяснения этому?

спросил(а) 2021-01-19T13:57:50+03:00 2 месяца, 3 недели назад
1
Решение
105

Вы воссоздаете ранее заданную переменную 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");

ответил(а) 2021-01-19T13:57:50+03:00 2 месяца, 3 недели назад
62

Вы определяете свойства объекта. Не массив.

+ Изменить

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

в


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

Также вы переопределяете skins внутри вашей функции LoadChar, как отметил LcSalazar.

скрипка

ответил(а) 2021-01-19T13:57:50+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема