Как создать массив переменных из массива в Javascript

0

У меня есть переменная, называемая "информация", которая создает многомерный массив. Для каждой строки массива я хочу вернуть переменную, имя которой является первым значением в массиве. Другими словами, с учетом массива "информации" ниже, мне нужен следующий вывод:

var lunalovegood = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i]    [1] + '!'; //Luna Lovegood is a Ravenclaw!;
var dracomalfoy = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i]    [1] + '!'; //Draco Malfoy is a Slythering!;;
var hermionegranger = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i]    [1] + '!'; //Hermione Granger is a Gryffindor!;;

Другими словами, я хочу иметь возможность работать с каждым из элементов массива "информация", чтобы создать некоторую разметку. Я уже знаю, как получить информацию, которая мне нужна, с учетом информационного массива, но, как вы можете видеть ниже, мне придется объявлять отдельные переменные для каждого из имен.

for (var i = 0; i < information.length; i++) {
var htmlString = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i]    [1] + '!'; //Luna Lovegood is a Ravenclaw!
$('div').html(htmlString);
} //end for loop 

var information = [
['lunalovegood', 'Ravenclaw', 'Luna', 'Lovegood', '(chaser)', 'lovegood.jpg', 4]
['dracomalfoy', 'Slytherin', 'Draco', 'Malfoy', '(seeker)', 'malfoy.jpg', 2],
['hermionegranger', 'Gryffindor', 'Hermione', 'Granger', '(none)', 'granger.jpg', 3],
];

Javascript ниже создает три переменные, называемые "lunalovegood", "dracomalfoy" и "hermionegrange", но это длинный путь создания переменных. Как создать эти переменные, по одному для каждой строки в массиве, путем циклирования через 0-й индексированный элемент в массиве "информация"?

    var myVariables = {}
   ,varNames = ["lunalovegood","dracomalfoy","hermionegranger"]; 
for (var i=0;i<varNames.length;i+=1){

 myVariables[varNames[i]] = 0;
    console.log(lunalovegood);
}
  • 0
    Вы не хотите имен переменных. Используйте объект (карту ключ-значение) и его свойства для «имен»
Теги:
arrays

4 ответа

3
Лучший ответ

Вашему текущему подходу просто требуется минимальная настройка, чтобы не требовать второй массив.

var students = {}, i;
for (i = 0; i < information.length; ++i)
    students[information[i][0]] = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i][1] + '!';

Теперь ключ устанавливается, беря первый элемент массива. Затем вы сделаете следующее для своего текста,

students['lunalovegood']; // "Luna Lovegood is a Ravenclaw!"

Вы также пропуская ни , в вашей information буквальной.

  • 0
    Привет - спасибо за ответ. Я немного запутался - гермионегранджер стал переменной? Вот мой JSFiddle, использующий ваш ответ: jsfiddle.net/YG5Lu/4
  • 0
    Ой, подождите, может быть, мне нужно будет console.log Students.hermionegranger, а не просто Hermionegranger ... jsfiddle.net/YG5Lu/5
0
var formattedInfo = {}; 
$.each(information, function (i, v) {
    formattedInfo[v[0]] = v[2] + ' ' + v[3] + ' is a ' + v[1];
});

в конце первой строки вашего определения информации есть недостающая запятая.

Кстати, мне очень нравится Гарри Поттер.

0

Я согласен с Берги. Переменные должны представлять собой фиксированный конечный набор элементов, определенных кодом; данные (как и в содержании списка) обычно не должны вводить новые переменные.

Таким образом, вот такой подход, который я бы рекомендовал (обратите внимание, что я добавил немного больше, чем "минимальный необходимый", удачи!):

// Using a function makes it easy to change details and avoid leaking
// variables accidentally.
function loadWizards(information) {
  var wizards = [];
  for (var i = 0; i < information.length; i++) {
    var info = information[i];
    var name = info[0];
    // Mapping to named properties means we can forget about indices!
    wizards[name] = {     // <- use Name to map to our Wizard object
        house: info[1],
        // ..
        image: info[7]
    };            
  }
  return wizards;
}

// I have no idea if they are wizards, but give variables useful names.
// 'information' is too generic.
var wizards = loadWizards(information);

// Then later on, use it as:
alert("Hello " + wizards['hermionegranger'].name + "!")
                       // ^-- property access by Name
0

Это должно помочь вам:

К каждой переменной в глобальной области можно получить доступ как свойство строки объекта окна

var myvariable = 4;
alert(window["myvariable"]); // will alert 4

window["newvariable"] = 6;
alert(newvariable);   // will alert 6
  • 0
    Уч! пожалуйста, не советуйте загрязнять глобальный охват ...
  • 0
    Я не ... это просто передача знаний
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню