Как преобразовать значения массива в переменные

У меня есть значение такого массива:

multi_arr = ["resi_spec","resi_desc"];

Таким образом, каждое значение массива рассматривается как переменная, и я хочу динамически хранить некоторое значение этих переменных следующим образом:

resi_spec = "good morning"
resi_desc = "good evening";

Так что значения массива преобразуются как переменные. Это возможно?

Я не хочу использовать use obj[resi_spec], как это, и я использовал массив, а не переменную, если я просто введу resi_spec означает, я получу доброе утро.


person SSN    schedule 14.09.2015    source источник
comment
Где вы берете значения, которые должны соответствовать ?   -  person Hacketo    schedule 14.09.2015
comment
Это звучит как то, для чего вы должны использовать объект.   -  person Saad    schedule 14.09.2015
comment
Откуда вы берете значения "good morning" и ""good evening"?   -  person Halcyon    schedule 14.09.2015
comment
Текущие ответы, за которые проголосовали, работают. Суть в том, что 1) вам нужен объект-контейнер (будь то global или window); 2) вы можете использовать переменную в скобках.   -  person leesei    schedule 14.09.2015


Ответы (4)


Вы можете использовать объект для хранения значений:

var multi_arr = ["resi_spec","resi_desc"];
var resi = {};
multi_arr.forEach(function(val) { 
    resi[val] = "good morning"; 
});

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

var lookupHelper = function(key) {
    if (key == 'resi_spec') return 'good morning';
    if (key == 'resi_desc') return 'good evening';
};
var multi_arr = ["resi_spec","resi_desc"];
var resi = {};
multi_arr.forEach(function(val) { 
    resi[val] = lookupHelper(val); 
});

person pherris    schedule 14.09.2015
comment
Хороший подход, хотя метод forEach будет совершенно бесполезен, если вы хотите иметь разные значения. Однако вы можете использовать другой массив для тех… - person Sebastian Simon; 14.09.2015
comment
Чтобы установить разные значения, вы просто реализовали бы немного дополнительного кода для поиска правильного значения. Я добавил пример, чтобы показать, как это сделать. - person pherris; 15.03.2017

Вы также можете сделать следующее. Хотя на самом деле это не рекомендуется, так как вы будете создавать глобальные переменные. Jsfiddle

var varNames = ["name1", "name2", "name3"];
for(var i = 0; i < varNames.length; i++){
  window[varNames[i]] = i;
}
console.log(name1); // 0
console.log(name2); // 1
console.log(name3); // 2
person Sotiris Kiritsis    schedule 14.09.2015
comment
Это в основном почти то же самое, что и объектный подход, только ваш объект является глобальным объектом. - person Sebastian Simon; 14.09.2015
comment
@Xufox, но, в отличие от других ответов, вы можете получить к ним прямой доступ по их имени (даже не рекомендуется) - person Hacketo; 14.09.2015

Лучший способ - иметь такой объект, как ниже

multi_arr = ["resi_spec","resi_desc"];
var obj = {};
obj[multi_arr[0]] = "good morning";
obj[multi_arr[1]] = "good evening";
console.log(obj); //prints Object {resi_spec: "good morning", resi_desc: "good evening"})

вы можете получить доступ к переменным, таким как ниже

console.log(obj["resi_spec"]); //prints "good morning";
console.log(obj["resi_desc"]); //prints "good evening";
person Mritunjay    schedule 14.09.2015
comment
Извините, это не то, что я ожидал. просто я ввожу предупреждение (resi_spc); я хочу получить ответ доброе утро. я не буду использовать объект это возможно? - person SSN; 14.09.2015
comment
@SatheeshSivaNallatambi, чего ты тогда хочешь? - person Mritunjay; 14.09.2015

Итак, я неправильно понял ваш вопрос, поэтому вот мой отредактированный ответ.

var multi_arr = ["resi_spec","resi_desc"];

var object = {};

object[multi_arr[0]] = "good morning";
object[multi_arr[1]] = "good evening";

console.log(object);
person Corbin    schedule 14.09.2015
comment
Вам лучше просто удалить свой ответ и опубликовать новый, хотя сейчас, наверное, уже слишком поздно. - person Sebastian Simon; 14.09.2015
comment
В повторной публикации мало смысла, так как другие ответы теперь действительны. - person Corbin; 14.09.2015